Backend/JPA

Backend/JPA

[JPA] 프록시, 즉시&지연 로딩, 영속성 전이, 고아 객체

✔ 프록시(Proxy) 만약 비즈니스 로직에서 Member에 대한 정보를 가지고올 때 .find()를 통해 Member Entity와 연관관계 매핑된 Entity를 join하여 한번에 다 가지고온다. 하지만 Member에 대한 정보만 쓰려는 케이스는 불필요한 다른관계의 Entity정보까지 join을 통해 가지고오게 되는데 둘 다 쓰는 케이스에서는 편리하겠지만 Member에대한 정보만 사용하는 케이스에서는 낭비가 될 수 있다. 이러한 불필요한 낭비를 JPA는 프록시와 지연로딩을 사용하여 해결하고 있다. 실제클래스를 상속 받아서 만들어지고 겉 모양이 같다. EntityManager.find() - 데이터베이스를 통해 실제 엔티티 객체 조회 EntityManager.getReference() - 데이터베이스 ..

Backend/JPA

[JPA] 상속관계 매핑, @MappedSuperclass

🤔 상속관계 매핑? 관계형 데이터베이스는 상속관계라는 개념이 없다. 하지만 슈퍼타입과 서브타입 관계라는 모델링 기법이 객체의 상속과 유사하기 때문에 이점을 이용하여 상속관계 매핑을 하고있다. (객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑) DB에서 슈퍼타입과 서브타입의 논리모델을 디자인 했을때 실제 물리 모델로 구현하는 전략은 3가지가 있다. ✔ 조인전략(JOINED) 가장 정규화된 방법으로 각테이블을 join하는 방식으로 데이터 를 저장하게되며 데이터가 정규화 되어 저장되기 때문에 중복되는 데이터(name, price)를 줄일 수 있고, 객체의 관계와 가장 유사하다. @Inheritance(strategy = InheritanceType.JOINED)과 객체의 상속(extends)을 사용하..

Backend/JPA

[JPA] 다양한 연관관계 매핑 ( ManyToOne, OneToMany, OneToOne, ManyToMany )

✔ 연관관계 매핑시 고려사항 3가지 다중성 : @ManyToOne, @OneToMany, @OneToOne, @ManyToMany 단방향, 양방향 연관계의 주인 어노테이션을 사용하여 관계를 정확히 매핑해주고, 객체(Entity)를 단방향 또는 양방향으로 사용할지 충분히 고려한 후 양방향으로 설정 했다면 연관관계 주인을 설정함으로써 한쪽에서만 등록,수정이 일어날 수 있도록 한다. 🔎 @ManyToOne 다대일 [N:1] 💡 단방향 가장 많이 사용되는 연관관계로 한쪽(Member)에서만 조회, 등록, 수정 하도록 매핑 💡 양방향 양방향으로 설정하게 되면 Member와 Team객체에 서로 참조할 수 있는 필드를 생성하여 각각의 관계를 설정해준다. 이렇게되면 양쪽에서 등록, 수정이 일어날 수 있기 때문에 연관관..

Backend/JPA

[JPA] 객체 지향 모델링과 양방향,단방향 연관관계 매핑

🤔 기존의 문제점 객체를 테이블에 맞추어 모델링 try{ //팀 등록 Team team = new Team(); team.setName("TeamA"); em.persist(team); //맴버 등록 Member member = new Member(); member.setUsername("member1"); member.setTeamId(team.getId()); // **외래키 식별자를 직접 다루고 있다.** em.persist(member); //조회 Member findMember = em.find(Member.class, member.getId()); Long findTeamId = findMember.getTeamId(); // 맴버객체에 저장된 팀아이디 즉 외래키를 찾는다 Team findTe..

Backend/JPA

[JPA] JPA 가장 중요한 2가지 - 엔티티 매핑

🤔 엔티티 매핑? 🔎 Entity 직역하면 '실체', '독립체' 라는 뜻으로 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 '어떤 것(Thing)'이라고 말할 수 있다. (DB에 저장되거나 가져와지는 객체라고 생각하면 편할것 같습니다. ) 🔎 Mapping 일반적인 의미로는 하나의 요소를 다른 요소와 대응시키거나 연결하는 프로세스를 말합니다. 📌 Entity(객체)와 관계형 데이터베이스(테이블, 컬럼, 관계 등)를 Mapping 즉 서로 대응시켜 연결하는 과정으로 보통 어노테이션(Annotation)을 사용하여 이루어지며 Mapping을 통해 JPA는 객체와 데이터베이스 간의 변환을 자동으로 처리할 수 있게 됩니다. ✔ Mapping 구분 Annotation 객체와 테이블 매핑 @Entity, @..

Backend/JPA

[JPA] JPA 가장 중요한 2가지 - 영속성 컨텍스트

🤔 영속성 컨텍스트? 의미를 해석해보자면 "엔티티를 영구 저장하는 환경" 이라는 뜻으로 눈에 보이지 않는 논리적인 개념이다, EntityManager를 통해서 영속성 컨텍스트에 접근한다. ✔ 엔티티 매니저 팩토리 & 엔티티 매니저 Process EntityManager.persist(entity); // 영속화 EntityManager를 생성하면 1:1로 PersistenceContext라는 공간이 생성되어지고, Entity를 DB에 저장하는것이 아니라 PersistenceContext에 저장한다. ✔ 엔티티의 생명주기 📎 비영속(new/transient) //객체를 생성한 상태 ( 비영속 ) Member member = new Member(); member.setId("member1"); member...

장용석
'Backend/JPA' 카테고리의 글 목록