728x90
반응형

 

Book.java

@Entity
@NoArgsConstructor
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class Book extends BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String category;

    private Long authorId;

    private Long publisherId;

    @OneToOne(mappedBy = "book")
    @ToString.Exclude
    private BookReviewInfo bookReviewInfo;

}

 

 

BookReviewInfo.java

@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Entity
@NoArgsConstructor
@Data
public class BookReviewInfo extends BaseEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToOne(optional = false)
    private Book book;

    private float averageReviewScore; // primitive type -> 컬럼생성 시 자동으로 not null 설정 됨

    private int reviewCount;
}

 

[optional] : 해당 컬럼이 필수인지 아닌지 여부 (false는 반드시 존재한다는 의미)

 - default인 true로 설정되면 join 시 outer join 실행

 - false로 설정되면 inner join 실행

 

[mappedBy] : 위와 같이 단방향 관계에서 Book에서 BookReviewInfo 클래스를 참조할 경우, 테이블 상에서는 book 테이블이 book_review_info 의 컬럼값을 소유하지는 않으므로 이 설정으로 처리

 

@ToString.Exclude : @ToString의 순환참조 제거를 위해 설정

 

 

※ 출처 - 패스트캠퍼스, "안정적인 서비스를 위한 스프링DATA와 Security - JPA 프로그래밍"

반응형

'JPA' 카테고리의 다른 글

spring jpa db 초기화 설정  (0) 2022.03.04
Spring JPA 영속성 컨텍스트  (0) 2022.02.28
@EntityListeners  (1) 2022.02.18
@Entity 기본속성  (1) 2022.02.17