[SPRING] JPA - One to One ( 1 : 1 )

RuiN·2022년 7월 28일
0


Entity Mapping One To One

말 그대로 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의 중복으로 불필요함 삭제

TEST

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라고 가정 //

profile
어디까지 올라갈지 궁금한 하루

0개의 댓글