콘텐츠로 이동

2021 11 01

2021-11-01

JPA 일급 컬렉션

  • 참고 1: https://wbluke.tistory.com/23
  • 참고 2: https://bgpark.tistory.com/156
  • 참고 3: https://galid1.tistory.com/592
  • 컬렉션 가공엔 일급 컬렉션!
  • 긴밀한 관계가 있다면 양방향 매핑을 하게되는데,,, - 사실 양방향 매핑은 정말 필요한 곳 아니라면 하지마! - 관리 포인트가 늘어나고, 사실 단방향으로도 모든 관계 구현 가능하거든
  • 엔티티의 컬렉션을 일급 컬렉션으로 포장하려면 @Embeddable을 사용하자! - 나는 엔티티에 속한 객체입니다~~!!! - 실제 하나의 객체이지만, DB의 테이블에서는 해당 객체 내부에 있는 필드들이 풀어져서 만들어짐 - 가독성이 올라감! 다음과 같이도 사용이 가능
    @Entity
    @Table(name = "user")
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
    
        private String name;
    
        @Embedded
        private Address address
    }
    
    @Embeddable
    public class Address {
        private String zipCode;
        private String address1;
        private String address2;
    }
    
    @Getter 
    @NoArgsConstructor(access = AccessLevel.PROTECTED) 
    @Entity 
    public class Orders extends BaseEntity { 
        @Embedded private OrderDetails orderDetails = new OrderDetails(); 
    } 
    
    @Getter 
    @NoArgsConstructor(access = AccessLevel.PUBLIC) 
    @Embeddable 
    public class OrderDetails { 
        @OneToMany(mappedBy = "orders", cascade = CascadeType.PERSIST, orphanRemoval = true) 
        private List<OrderDetail> details = new ArrayList<>();
    }