인프런 커뮤니티 질문&답변

유승현님의 프로필 이미지
유승현

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

페치 조인 2 - 한계

fetch join시 alias를 사용할때 문제점

작성

·

1K

0

fetch join시 1:N 관계에 있는 엔티티에대해 alias를 사용하면

문제가 될 수 있다고 하셨는데

문제가 없을거라 생각하면서 테스트해봤지만 역시나여서

어떤 상황에서 문제가 생길지 생각해봐도 잘 떠오르지 않습니다.

팀 A

멤버1 나이 20

멤버2 나이 8

팀B

멤버 1 나이 20

인 조건에서

List<Team> cond1Team = em.createQuery("select t from Team t join fetch t.members m where m.age > 10).getResultList();

List<Team> cond2Team = em.createQuery("select t from Team t join fetch t.members).getResultList();

cond1Team.setName("newTeam")

em.persist(cond1Team)

em.clear()

----------------------

----------------------

이렇게 하면 소속이 꼬이나?

- cond1Team하고 cond2Team에서 team들은 같은 엔터티일텐데

-cond1Team에서 이름을 바꾸면 여기에는 나이가 8살인 멤버가 포함이 안되니 소속 이름이 안바껴야 하는데 먼가 충돌이 생기나?

하면서 이대로 persiste후

 List<Team> findTeams = em.createQuery("select t from Team t join fetch t.members).getResultList();

로 조회 후 출력해봤는데 문제되는 상황은 없었습니다.

cascade나 다른 옵션때문에 문제가 생길것 같은 상황도 잘 상상이 안가서 여쭤봅니다.

----------------------

----------------------

등록및 삭제과 연관될때 문제가 생길것 같으면서도 잘 모르겠고,

조회만 하는경우에는 문제가 없을것 같고

저렇게 조회할 당시에는 전혀 문제가 없어보이고,

팀에 대해 변경을 가하고 저장을하더라도 다음에 조회할때는 문제가 되지 않는다 -> 저렇게 조회를 해도 큰문제는 없다.

이렇게 계속 생각이듭니다.

물론, 조회하고나서 자신이 저렇게 쿼리를 날린 것을 잊고, 사용한다면 문제가 될것같지만, 그게 아닌경우에도 문제가 있는걸까요?

----------------------

----------------------

다른 케이스를 생각해봐도 어떤 경우에 문제가 될 수 있는지 잘 모르겠는데

언제 문제가 생길수 있는지 힌트를 주실 수 있을까요?

(엔터티의 상태와, db의 상태의 일관성이 깨질때 어떤 문제가 발생할수 있는지)

답변주시면 감사드리겠습니다.

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 승현님

다음을 참고해주세요.

https://www.inflearn.com/questions/15876

감사합니다.

유승현님의 프로필 이미지
유승현

작성한 질문수

질문하기