티스토리 뷰
여기서 양방향이라고 가정하면,
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 |