Spring (22) 썸네일형 리스트형 orphanRemoval (고아 객체) orphanRemoval고아 객체... 번역이 조금... 그렇지만 말 그대로 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 고아 객체라 부릅니다. 여기서 부모 엔티티와 자식 엔티티는 어떤 기준으로 나눌까요? 엔티티 간의 관계 설정에서 부모-자식 관계의 기준 정립은 데이터의 구조와 비즈니스 로직에 따라 달라질 수 있습니다. 대체로, 연관관계의 방향을 정할 때, 단일 엔티티(부모)가 컬렉션 타입의 여러 엔티티(자식)를 참조하는 구조에서는 ‘일대다’ 관계가 형성되며, 이때 ‘다’ 쪽에 해당하는 엔티티가 자식 엔티티가 됩니다. 연관관계의 주인과 부모-자식 관계가 혼돈될 수 있으니 주의해야 합니다. 자바 JVM에 익숙해서 참조가 끊긴 객체를 가비지 컬렉터가 자동으로 삭제하는 과정처럼 JPA에서도 부모 엔티티와 .. CASCADE (영속성 전이) CASCADEcascade는 영속성 전이 속성으로 특정 엔티티를 영속 상태(persist)로 만들 때 연관된 엔티티도 함께 영속 상태(persist)로 만들 때 사용합니다. cascase는 즉시 로딩이나 지연 로딩과는 관련 없습니다. Child child1 = new Child();Child child2 = new Child();Parent parent = new Parent();parent.addChild(child1);parent.addChild(child2);em.persist(parent);em.persist(child1);em.persist(child2); Parent 엔티티와 Child 엔티티가 다대일 연관관계를 형성할 때 위 코드와 같이 parent에 child를 넣더라도 persist는 따.. 즉시 로딩과 지연 로딩 https://praaay.tistory.com/27 프록시 (Proxy)프록시는 엔티티 객체를 흉내 낸 가짜 객체입니다. 프록시 덕분에 실제 엔티티를 조회하는 시점을 미룰 수 있습니다.그렇다면, 실제 엔티티를 조회하는 시점을 미뤄야 할 상황은 언제일까요? Mepraaay.tistory.com프록시를 정리한 글의 연장선으로 즉시 로딩과 지연 로딩에 대해 이야기해 보겠습니다. 위 그림처럼 Member 엔티티와 Team 엔티티가 연관관계로 묶여있을 때, Member 엔티티를 조회하면 연관관계로 묶인 Team 엔티티까지 조회해야 할까요? 두 엔티티를 모두 필요로 하는 상황이라면 좋겠지만, 위 그림처럼 Member 엔티티만 필요로 한다면 연관관계로 묶였다고 하더라도 두 엔티티를 함께 조회할 필요는 없습니다. M.. 프록시 (Proxy) 프록시는 엔티티 객체를 흉내 낸 가짜 객체입니다. 프록시 덕분에 실제 엔티티를 조회하는 시점을 미룰 수 있습니다.그렇다면, 실제 엔티티를 조회하는 시점을 미뤄야 할 상황은 언제일까요? Member와 Team 엔티티를 예로 들어보겠습니다. Member와 Team 엔티티는 일대다 단방향 연관관계로 연결되어 있습니다. 이때 Member 엔티티를 조회하면 Team 엔티티도 당연히 조회되어야 할까요? 그렇지 않습니다. 회원과 팀 엔티티를 함께 필요로 하는 경우라면 두 엔티티를 한 번에 가져오는 게 좋겠지만, Member 엔티티를 조회할 때 항상 Team 엔티티가 조회된다면 회원 엔티티만 필요할 경우에는 불필요한 쿼리가 나가며 성능 측면에서 불리하게 작용합니다. 따라서 우리는 연관관계가 걸려있는 엔티티끼라도 하나.. @MappedSuperclass @MappedSuperclass@Getter@MappedSuperclass@EntityListeners(AuditingEntityListener.class)public abstract class BaseTimeEntity { @CreateDate private LocalDateTime createdDate; @LastModifiedDate private LocalDateTime modified;} 위 코드에서 @MappedSuperclass 애노테이션이 사용된 것처럼 엔티티끼리 공통 매핑 정보가 필요할 때 @MappedSuperclass를 사용합니다. 상속관계 매핑과는 전혀 관련 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할을 합니다. 주로 등록일, 수정일.. 상속관계 매핑 상속 관계 매핑 객체를 가지고 개발하다 보면 상속 개념을 자주 사용합니다. 하지만 DB 테이블에는 정확히 객체의 상속 관계와 동일한 상속 개념이 없습니다. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사한 개념입니다. 따라서 JPA에서 객체의 상속(엔티티 상속)과 테이블의 슈퍼타입 서브타입 관계를 매핑하는 것을 상속 관계 매핑이라 부릅니다. 객체의 상속 관계를 테이블의 슈퍼타입 서브타입 관계로 매핑할 때 JPA는 세 가지 방법을 제공합니다. 각각의 테이블로 변환하는 조인 전략, 통합 테이블로 변환하는 단일 테이블 전략, 그리고 서브타입 테이블로 변환하여 구현 클래스마다 테이블을 만드는 전략 이렇게 세 가지 전략을 제공합니다. 상속 관계 매핑 애노테이션상속 관계 매핑에 사용되는 애노테이션은 @I.. 일대일 연관관계 매핑 엔티티의 연관관계는 다대일, 일대다, 일대일, 그리고 다대다 관계로 나뉩니다. 다대일은 연관관계의 주인을 다쪽에 두었다는 의미이고 그 반대인 일대다는 일쪽에 연관관계의 주인을 두었음을 뜻합니다. 아래 글에서 다대일 연관관계에 대해 자세히 설명했으니 참고하면 좋을 것 같습니다. 다대일 연관관계https://preyhong.tistory.com/63 연관관계 매핑 기초preyhong.tistory.com 일대다 연관관계다대일의 반대인 일대다 관계는 권장하지 않는 연관관계입니다. 일대다 관계에서 일쪽이 연관관계의 주인이 될 경우 엔티티가 관리하는 외래 키가 다른 테이블에 있는 문제가 생깁니다. 또한 연관관계 관리를 위해 추가로 UPDATE 쿼리를 날려야 합니다. 아래와 같은 그림이 일대다 단방향인데 구현이 가.. 연관관계 매핑 기초 JPA를 사용해 엔티티 객체와 DB 테이블을 매핑하기 위해서는 연관관계 매핑이 필수적입니다. 특히 객체의 참조와 테이블의 외래 키를 매핑하는 부분은 굉장히 중요합니다. 객체는 참조를 통해 연관관계를 형성하고 테이블은 외래 키를 통해 연관관계를 형성하는 차이점을 이해하고 이 둘을 매핑해 봅시다. 객체의 참조와 테이블의 외래 키를 매핑할 때는 방향, 다중성, 그리고 연관관계의 주인이 중요한 세 가지 지점입니다. 만약 아래 그림처럼 객체를 설계할 때 참조 대신 외래 키를 그대로 사용해서 테이블에 맞추어 모델링하면 어떨까요? 테이블은 기본 키와 외래 키를 가지고 연관관계를 형성하는 것이 일반적입니다. 하지만 객체에서도 참조가 아닌 키 값을 가지고 연관관계를 형성하게 되면 객체 지향적이지 않을뿐더러 Member .. 이전 1 2 3 다음