Programming/JPA 프로그래밍7 08. 프록시와 연관관계 관리 프록시 엔티티를 조회할 때 연관 엔티티들이 항상 사용되는 것은 아니다. 예를 들어, 회원 엔티티와 연관된 바버샵 엔티티는 사용될 때도 있지만 그렇지 않을 때도 있다. 같은 회원 엔티티지만 바버는 연관된 바버샵 엔티티를 사용해 근무 중인 바버샵을 표시한다. 그러나 고객은 바버샵 엔티티와 연관관계 설정이 되어있지 않기 때문에 제공하지 않는다. public class Member extends BaseEntity { ... @ManyToOne @JoinColumn(name = "WORK_PLACE_ID") private BarberShop workPlace; 그런데 매번 회원 엔티티를 조회할 때마다 바버샵 테이블과 조인하는 것은 효율적이지 않다. JPA에서는 이런 문제를 해결하기 위해 엔티티가 실제로 사용될 .. 2023. 12. 5. 07. 고급 매핑 이번 매핑 전략에서는 책의 예시를 그대로 사용한다. 내 프로젝트에 적용해보려 했는데, 적절히 적용할만한 부분을 찾지 못했다. 2023.11.27 프로젝트에 적용했다! 링크에서 확인할 수 있다. 모든 코드는 링크에서 확인할 수 있다. 상속 관계 매핑 - 조인 전략 조인 전략은 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 복합 키로 사용하는 전략이다. 위의 예시에서는 ITEM, ALBUM, MOVIE, BOOK 테이블을 모두 만든다. 부모 키를 받아 기본 키로 사용하기 때문에 조회 시 조인 방식을 사용한다. 객체는 타입으로 구분할 수 있지만 테이블은 타입의 개념이 없다. 따라서 타입을 구분하는 칼럼을 추가해야 한다. 부모 클래스에 @Inheritance(strategy=.. 2023. 11. 13. 06. 다양한 연관관계 매핑 연관관계 매핑시 고려할 점 다중성 두 엔티티가 일대일 관계인지 일대다 관계인지의 다중성을 고려해야 한다. 단방향, 양방향 두 엔티티 중 한쪽만 참조하는 단방향 관계인지 서로 참조하는 양방향 관계인지 고려해야 한다. 연관관계의 주인 양방향 관계면 연관관계의 주인을 정해야 한다. - 다중성 다대일(@ManyToOne) 일대다(@OneToMany) 일대일(@OneToOne) 다대다(@ManyToMany) : 실무에서 거의 사용하지 않는다. - 단방향, 양방향 객체 관계에서 한 쪽만 참조하는 것을 단방향, 양쪽이 서로 참조하는 것을 양방향이라 한다. A 엔티티와 B 엔티티가 연관관계를 맺는다 할 때, A의 필드에만 B가 있고 B에는 A가 없다면 단방향이다. 서로의 필드에 서로가 있다면 양방향이다. - 연관관계의.. 2023. 11. 6. 05. 연관관계 매핑 기초 연관관계 매핑 연관관계 매핑이란? 대부분의 엔티티는 다른 엔티티와 연관 관계를 가진다. 객체는 '참조'를 통해 연관관계를 맺는다. 예를 들어, 연관된 데이터를 조회할 때 Order객체는 필드의 Member객체를 참조(order.getMember())한다. 이를 객체 그래프 탐색이라 한다. 반면, 테이블은 '외래 키'를 통해 연관관계를 맺는다. 예를 들어, 연관된 데이터를 조회할 때 order 테이블은 member_id라는 외래 키를 통해 member테이블을 참조(SELECT * FROM ORDER O JOIN MEMBER M ON O.MEMBER_ID = M.ID)한다. 이를 조인이라 한다. 이렇게, 객체의 연관관계와 테이블의 연관관계는 차이를 보인다. 이 둘을 매핑하는 것을 연관관계 매핑이라 한다. 연.. 2023. 10. 12. 03. 영속성 관리 영속성 컨텍스트 - 영속성 컨텍스트란? 엔티티를 영구 저장하는 환경이라고 이해할 수 있다. 엔티티 매니저를 통해 엔티티를 저장 / 조회하는 경우 엔티티 매니저는 엔티티를 영속성 컨텍스트에 보관하고 관리한다. 엔티티에는 네 가지 생명주기(라이프 사이클)가 존재한다. 해당 내용은 링크에서 자세히 설명하고 있다. - 영속성 컨텍스트의 특징 id값으로 영속 객체를 구분하기 때문에 id값이 반드시 필요하다. id값이 없다면 예외가 발생한다. 영속성 컨텍스트에 저장된 영속 객체는 트랜잭션이 커밋되는 순간 DB에 저장된다. 영속성 컨텍스트 내부에는 1차 캐시라고 불리는 캐시가 존재한다. 영속 객체는 모두 이 캐시에 저장된다. 조회 쿼리를 실행할 때 만일 조회하고자 하는 객체가 1차 캐시 내에 존재한다면, DB에서 별.. 2023. 8. 18. 이전 1 2 다음 반응형