작성
·
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의 상태의 일관성이 깨질때 어떤 문제가 발생할수 있는지)
답변주시면 감사드리겠습니다.