티스토리 뷰

2022/jpa

day05[다대일 양방향 관계]

yanii 2022. 12. 1. 09:36

여기서 양방향이라고 가정하면,

 

Owner.java

 

pet -> owner

owner -> pet

단방향2개 >> 연관관계의 주인을 찾아야 한다.

select일 때는 상관없으나, insert, update, delete일 경우, 복잡성이 증가 하기 때문

 

pet안에 있는 owner_id(fk)를 관리하는 객체를 연관관계의 주인이라고 하며, owner객체가 연관관계의 주인이다!

pet안에 있는 owner를 통해서만 insert, update, delete 접근할 수 있게 해준다.

반대방향으로 접근하지 못하게 한다.

mappedBy = "owner" << 연관관계 주인을 설정

 

객체쪽에서는 무조건 한 방향으로만 수정되게끔 해야 한다. 방향성이 있어서 누가 이 연관관계를 관리하는지

주인을 정해줘야 한다.

@OneToMany 쪽에서 mappedBy를 쓰고, 연관관계 주인을 정해줘야 한다.

 

list<pet>에 fk가 있다는 뜻이니까 그 fk의 주인을 적어주는 것임.

연관관계를 맺고 있는 필드명을 쓰면 된다.

 

 

PetTest.java

양방향이기 때문에 getOwner().getPets()가 가능함.

 

즉시로딩, 처음에 join 싹다 해서 select함.

지연로딩, 실제 연관관계의 필드를 조회할 때 select가 나감. n+1문제 발생.

 

 

 

 

fetchjoin : 즉시로딩, 지연로딩의 장단점을 다 살려놓은 join

내가 원하는 연관관계만 join할 수 있음.

 

PetRepository.java

//jpa방식

//메소드 이름을 다르게 짓고 싶다면, 

@Query("selecct p from Pet p)를 반드시 써주기

where절을 걸어서 조건을 걸어줄 수 잇음. petName만 조인이 들어가는 것임.

 

 

PetTest.java

 

오류

old style outer join (+) cannot be used with ANSI joins : OracleDialect 오류

 

'2022 > jpa' 카테고리의 다른 글

day06[queryDSL-1]  (0) 2022.12.01
day06[jpa, mybatis 연동]  (0) 2022.12.01
day04[다대일관계, N:1]  (0) 2022.11.30
day04[연관관계]  (0) 2022.11.30
day04[Auditing(어디팅)]  (0) 2022.11.30
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
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
글 보관함