Spring 65

List<OrderInfo> findAllByMember_MemberIdOrderByOrderDateDesc(Long memberId);

@Entity @Data @ToString(exclude = "member") @NoArgsConstructor public class OrderInfo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long orderId; // 오더 아이디 (pk) @Column(length = 16, nullable = false) private String orderNo; // 주문번호 @CreationTimestamp private Date orderDate; // 주문날짜 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; // 주문..

Spring 2023.04.26

@OneToMany(mappedBy =

mappedBy 속성은 @OneToMany와 @OneToOne 어노테이션에서 사용됩니다. 이 속성은 양방향 관계에서 관계의 "주체"가 아닌 "반대쪽" 엔티티에 설정됩니다. @ManyToOne 어노테이션에는 mappedBy 속성이 없습니다. 대신, @ManyToOne 측에서는 필요한 경우 외래 키(ForeignKey)를 정의할 수 있습니다. 이는 @JoinColumn 어노테이션을 사용하여 설정할 수 있습니다. 예를 들어, Post와 Comment 엔티티 사이에 양방향 관계를 설정하려면 다음과 같이 코드를 작성할 수 있습니다. 위 코드에서, Post 엔티티는 @OneToMany 어노테이션과 함께 mappedBy 속성을 사용하여 관계의 "반대쪽"임을 나타냅니다. 반면에, Comment 엔티티는 @ManyToO..

Spring 2023.04.26

단방향 조인 mappedBy= 없이

mappedBy를 사용하지 않고 조인을 할 수도 있습니다. mappedBy를 사용하지 않는 경우, 양방향 관계가 아닌 단방향 관계가 됩니다. 이 경우, 한 엔티티에서만 다른 엔티티를 참조하게 됩니다. 예를 들어, Post와 Comment 엔티티가 있고, 각 Comment는 한 Post에 속할 수 있다고 가정해 보겠습니다. 이 경우 Post 엔티티에서 Comment 엔티티를 참조하는 단방향 관계를 생성할 수 있습니다. 위의 코드에서 @OneToMany 어노테이션과 함께 @JoinColumn 어노테이션을 사용하여 Post와 Comment 엔티티 사이의 단방향 관계를 정의하고 있습니다. 이렇게 하면, Post 엔티티에서 Comment 엔티티로의 참조는 가능하지만, Comment 엔티티에서 Post 엔티티로의 ..

Spring 2023.04.26

CascadeType.DETACH

CascadeType.DETACH는 부모 엔티티가 영속성 컨텍스트에서 분리될 때 연관된 자식 엔티티들도 함께 분리되도록 설정하는 옵션입니다. 영속성 컨텍스트는 JPA에서 엔티티의 생명주기를 관리하는 중요한 개념입니다. 영속성 컨텍스트는 엔티티를 저장, 수정, 삭제, 조회하는 등의 작업을 수행하며, 엔티티의 상태를 추적하고 관리합니다. 영속성 컨텍스트에 속한 엔티티는 "영속 상태"라고 하며, 영속성 컨텍스트에서 분리되면 "분리 상태"가 됩니다. 예를 들어, 아래와 같이 Parent 엔티티와 Child 엔티티가 있다고 가정합니다. 위의 경우, Parent 엔티티의 children 속성에 CascadeType.DETACH가 설정되어 있으므로, Parent 엔티티가 영속성 컨텍스트에서 분리될 때 연관된 Chil..

Spring 2023.04.26

CascadeType.REFRESH

CascadeType.REFRESH는 부모 엔티티가 새로 고침될 때 연관된 자식 엔티티들도 함께 새로 고쳐지도록 설정하는 옵션입니다. 이를 사용하면 부모 엔티티를 새로 고침할 때 자식 엔티티들도 함께 최신 상태로 업데이트되어 엔티티간의 동기화를 유지할 수 있습니다. 예를 들어, 아래와 같이 Parent 엔티티와 Child 엔티티가 있다고 가정합니다. 위의 경우, Parent 엔티티의 children 속성에 CascadeType.REFRESH가 설정되어 있으므로, Parent 엔티티를 새로 고침할 때 연관된 Child 엔티티들도 함께 새로 고침됩니다. 예를 들어, 데이터베이스에서 Parent 엔티티를 조회한 후, 이를 새로 고침하는 경우입니다. 위 코드에서 entityManager.refresh(paren..

Spring 2023.04.26

CascadeType.PERSIST와 CascadeType.MERGE 차이

CascadeType.PERSIST와 CascadeType.MERGE는 각각 다른 작업에 대한 옵션입니다. CascadeType.PERSIST: 부모 엔티티가 영속화될 때 연관된 자식 엔티티도 함께 영속화됩니다. CascadeType.MERGE: 부모 엔티티가 병합될 때 연관된 자식 엔티티도 함께 병합됩니다. 두 작업은 서로 독립적이며, CascadeType.PERSIST를 제거하면 부모 엔티티가 영속화될 때 자식 엔티티가 자동으로 영속화되지 않습니다. CascadeType.PERSIST가 설정되어 있는 경우에만 부모 엔티티를 저장할 때 연관된 자식 엔티티도 함께 저장됩니다. 따라서, CascadeType.PERSIST와 CascadeType.MERGE를 모두 설정해두면 부모 엔티티가 저장되거나 업데이트..

Spring 2023.04.26

CascadeType.MERGE

CascadeType.MERGE는 부모 엔티티가 병합(merge)될 때, 연관된 자식 엔티티도 함께 병합되도록 하는 설정입니다. 병합(merge)이란, 준영속 상태의 엔티티를 다시 영속화하고, 변경사항을 데이터베이스에 반영하는 과정을 말합니다. 준영속 상태란, 영속성 컨텍스트에서 관리되던 엔티티가 영속성 컨텍스트와의 관계를 끊고, 더 이상 영속성 컨텍스트가 관리하지 않는 상태를 의미합니다. 예시 코드를 통해 CascadeType.MERGE를 설명하겠습니다. 위의 예제에서 Parent 엔티티의 children 필드에 CascadeType.MERGE가 설정되어 있습니다. 이 말은, Parent 엔티티가 병합될 때 연관된 Child 엔티티들도 함께 병합되도록 설정되어 있다는 것입니다. 예를 들어, 다음과 같이..

Spring 2023.04.26

CascadeType.PERSIST

CascadeType.PERSIST는 부모 엔티티가 영속화될 때 자식 엔티티도 함께 영속화되도록 하는 설정입니다. 영속화란, 엔티티를 영속성 컨텍스트에 저장하는 것을 말합니다. 영속성 컨텍스트는 JPA가 관리하는 임시 저장공간으로, 데이터베이스와 일치되지 않아도 된다는 점에서 1차 캐시로 볼 수 있습니다. 영속화된 엔티티는 영속성 컨텍스트에서 관리되며, 트랜잭션이 커밋되는 시점에 데이터베이스에 반영됩니다. 예시 코드를 통해 CascadeType.PERSIST를 설명하겠습니다. 위의 예제에서 Parent 엔티티의 children 필드에 CascadeType.PERSIST가 설정되어 있습니다. 이 말은, Parent 엔티티가 영속화될 때 연관된 Child 엔티티들도 함께 영속화되도록 설정되어 있다는 것입니다..

Spring 2023.04.26

JPA의 orphanRemoval

JPA(Java Persistence API)에서 orphanRemoval은 엔티티 간의 부모-자식 관계에서 자식 엔티티가 부모 엔티티와 연결이 끊어질 때, 해당 자식 엔티티를 데이터베이스에서 자동으로 삭제하는 기능을 말합니다. 예를 들어, Parent 엔티티와 Child 엔티티가 있을 때, Parent 엔티티의 Child 엔티티 목록에서 특정 Child 엔티티를 제거하면, orphanRemoval=true로 설정된 경우, 해당 Child 엔티티는 데이터베이스에서 자동으로 삭제됩니다. 이를 통해 데이터 무결성을 보장할 수 있습니다. orphanRemoval은 다음과 같은 상황에서 유용합니다: 부모-자식 관계에서 자식 엔티티가 부모 엔티티 없이 독립적으로 존재할 수 없는 경우 부모 엔티티에서 자식 엔티티를..

Spring 2023.04.26