말 그대로 One to One , 1대1 관계의 테이블이라고 생각하면 됩니다.
@Entity
@NoArgsConstructor
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class Book extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String category;
private Long authorId;
@OneToOne(mappedBy = "book")
@ToString.Exclude
private BookReviewInfo bookReviewInfo;
@Entity
@NoArgsConstructor
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class BookReviewInfo extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(optional = false)
private Book book;
private float averageReviewScore;
private int reviewCount;
}
Book 이라는 Entity와 BookReviewInfo 라는 Entity 를 1대1 관계로 매핑 하고자 합니다.
Mapping 을 위와같은 코드를 작성하면 완성이 되는데,
간단하게 설명 하자면..@OneToOne(mappedBy = "book") @ToString.Exclude private BookReviewInfo bookReviewInfo; -------------------------- @OneToOne(optional = false) private Book book;
- @OneToOne : 1대1 관계로 매핑 어노테이션
- mappedBy = "book" : book 이라는 테이블 만들어 매핑
- optional = false : null을 존재하지 않게 함
- @ToString.Exclude : OverStackFlow를 방지 함, ToString의 중복으로 불필요함 삭제
Hibernate:
create table book_review_info (
id bigint generated by default as identity,
created_at timestamp,
updated_at timestamp,
average_review_score float not null,
review_count integer not null,
book_id bigint not null,
primary key (id)
)
> 테스트를 작성하고 실행시 , 위와같은 테이블이 생성되고 조회됩니다.
PS. 모든 JPA 는 JpaRepostiory 를 생성한 Entity라고 가정 //