티스토리 뷰

반응형

jpa 많이 쓰는데... 쓸때마다 헷갈려서 이참에 제대로 확인하고 정리해보기로 했다. 

관계 매핑으로 1:1, 1:N, N:1, N:M 있지만 본 글에서는 1:1에 대하여 정리한다. 

 

※ 공부하여 정리하는 글로 잘못된 부분이 있을 수 있습니다. 잘못된 부분이 있다면 알려주시면 감사하겠습니다 :)


 

1 : 1 관계란?

 

1:1 관계란 서로 다른 두 엔티티가 각 입장에서 하나의 관계만 갖는다는 것이다. 

Ex ) 학생과 사물함은 1:1 관계를 가진다. 학생은 하나의 사물함을 가지며, 사물함은 한명의 학생에게만 사용된다. 

- 학생 한 명당, 사물함 1개만 제공한다는 가정하에... ㅎㅎ

 

 

 

Spring Data JPA 를 이용한 1:1 관계

Foreign Key 를 이용한 방법 - 양방향

 

1) 1:1 관계인 두 entity 사이에 주 entity를 지정한다. ( 초점을 두고 사용될 Entity )

2) 주 entity 에 Foreign Key를 삽입한다. 

 - @OneToOne  

 - @JoinColumn ( name = "테이블에 생성될 컬럼 명", referencedColumnName = "외부에서 가져오는 컬럼 명" )

3) 주 entity가 아닌 entity(non-owning side)에서 자신의 Key를 소유하고 있는 entity를 알린다. (JPA에서 1:1은 양방향을 제공함)

 - @OneToOne ( mappedBy = "주 entity 에 포함되어 있는 자신의 필드명" )

 

[ Student Entity에 locker_id 필드가 추가적으로 포함되어 있음 ]

 

※ table "student"와 "locker"의 1:1관계 양방향으로, 주 entity는 "student" 이다.

[ Student Entity ]
[ Locker Entity ]

- insert 방법

 

 

Primary Key 를 공유하는 방법

이 방법은 table 내에 foreign key를 primary key로 설정하는 것이다. table "student", "locker"에 대입해보면, "locker"의 primary key를 "student"의 primary key로 대신하는 것이다.

※ 관점이 "student" entity에서 "locker" entity로 변한다. 

 

1) 두 entity에서 id 에 foreign key를 대입할 entity를 정한다. ( 여기서는 "locker" entity의 id가 student_id로 설정된다. )

2) foreign key를 id로 사용하기 위해 필요한 설정을 진행한다. 

  - @JoinColumn, @MapsId 를 이용하여 foreign key로 가져올 entity를 지정한다.

  - @Id 필드에 foreign key를 매핑한다.

  - @OneToOne 으로 1:1 매핑임을 알린다.

3) 자신의 Primary key가 다른 entity의 Id로 설정됨을 알린다.

  - @PrimaryKeyJoinColumn

  - @OneToOne(mappedBy = "소속되는 entity의 필드 명")

 

[ Locker Entity의 id가 Student의 Primary Key로 정의되어 있음 ]

 

※ Locker에서 @GeneratedValue가 필요없는 이유는 Locker의 ID를 Student의 ID로 대신하기 때문이다.

[ locker entity ]
[ student entity ]

- insert 방법

 

 

※ JPA 에서는 1:1 양방향을 지원한다. 

※ @OneToOne 에서 mappedBy 속성은 주 Entity에 소속되는 Entity에서 작성되는 것이다.

 

 

[참고자료]

https://www.baeldung.com/jpa-one-to-one

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함