DevBoi

연관관계 매핑 예제 공부 및 실습 본문

Develop/[JPA]

연관관계 매핑 예제 공부 및 실습

HiSmith 2021. 9. 17. 00:16
반응형

연관관계에 대한 매핑 시 주의사항에 대한 공부를 했었고, 해당 공부를 진행하면서 많은 고민을 했었다.

실제로 구현 및 설게를 해보자

Member, Team, order, orderItem에 대한 설게를 해보자.

 

우선 사전 제약 사항에 대한 설정을 해보자

Member들은 각각의 정보를 가지고있고, 이 Member들에게는 Team의 정보가 포함이 된다.

어떤 Member는 team에 한군데 소속이 될수 있다.

또한 Member가 order들을 가질수있고, 이 order들에게는 orderItem들이 존재할수있다.

마지막으로 orderItem이 order와 item을 이어주는 것이라고생각을 하면 되고,

Item은 이 Item에 대한 세부항목 정보이다.

 

1)Member

해당, memberId는 자동 id 값을 발급해주는 전략으로 컬럼을 사용하고 있다.

또한 Tema의 정보를 가지고 있지만, 한 멤버당 팀이 한개, 즉 팀의 입장에서는 한 팀에 여러명의 멤버가 소속되는 것이므로

Member에서는 소속된 팀의 정보만 필요하게 된다.

바로 JPA설계시에 가장 효율적인 설계 단방향 설계로 할수 있는 부분이다.

 

연관관계의 주인이 Team에 있기 때문에, Member에서는 @ManyToOne, @JoinColumn을 사용하여 해당 주인의 정보를 가져와서 보여주기만한다. JoinColumn의 name은 매핑하는 객체의 pK이다.

 

2) Team

Team 객체이다. oneToMany로, member에서 선언된 Team team의 변수를 mappedBy로 작성해주고,

해당 리스트 형태로, 컬럼을 선언한다. 뒤에 new Arraylist를 하지 않으면, 해당 null Exception가 날수 있기때문에, 생성해주는 것이 좋다. 부튼 해당 컬럼으로 list형태로 값을 가지고 있는다. 또한 get에서는 해당 List들을 return 해준다.

 

3) order

위와 마찬가지로 , 이해하고 있으면 편하다. Member 한명당 여러개의 Order를 가질수있기때문에

Memberid 로, 해당 주인을 member에게 주고, Order에서는 해당 멤버에 대한 조인컬럼을 걸어, orderId 별 조회를 할수있도록 한다.

 

3) OrderItem

 

4) Item

 

다른건 상관없지만, item은 굳이 매핑을 하지 않았다.

그 이유는 아이템에 대한 정보가 필요할때 굳이 주문에 대한 정보를 매핑해서 가져올 필요가 없기 떄문이다.

해당 주문리스트에 대한 아이디가 필요하다면, OrderItem에서 id 값으로 Item entity 에 값을 가져오면 되기 때문이다.

 

 

테스트로 작성해서 실행해봤다.

 

 

아주 찰지게 잘 들어가는 것을 볼수있다.

 

좀더 실무처럼 사용하고 조회해보도록 하자, 메소드 분리도 없고 처리를 한 함수에서 해서, 뭔가 때려박는 느낌이 있지만

 

 

 

 

 

 

잘 연관관계가 매핑되어서 들어가는 것을 볼수있다.

 

다음에는 좀더 고급 매핑 및 연관관계를 연습해보도록하자

반응형

'Develop > [JPA]' 카테고리의 다른 글

[고급 매핑] 상속관계 매핑  (0) 2022.01.18
[JPA] 다양한 연관관계 매핑 실습해보기  (0) 2021.12.13
JPA 연관관계 주인 및 설정 주의사항  (0) 2021.08.27
JPA 관련 h2연동  (0) 2021.08.17
[JPA] 연관관계 매핑  (0) 2021.07.30