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 |