남자, 다음 문제로 도와주세요.여러 가방을 가져올 수 없습니다 : 왜 @IndexColumn이 잘못된 결과를 반환합니까?
내 상위 항목에 두 개의 목록이 있으므로 유명한 "여러 봉지를 동시에 가져올 수 없습니다."오류가 발생했습니다. 다음은 코드 스크래치입니다.
class Manager{
@OneToMany(cascade = CascadeType.ALL)
@Fetch(FetchMode.JOIN)
@IndexColumn(name = "id")
private List<Action> actions;
@OneToMany(cascade = CascadeType.ALL)
@Fetch(FetchMode.JOIN)
@IndexColumn(name = "id")
private List<Activity> activities;
(...)
}
매핑이 단방향입니다.
좋아요, 나는 그것을 고치기 위해 IndexColumn 어노테이션을 사용할 수 있다고 봤습니다. 나는 그것을 구현했습니다, 여러분도 알다시피, 지금은 언급 된 예외를 얻지 못했습니다. 하지만 문제는 이제 db에서 모든 관리자를 얻으려는 경우 실제로 존재하는 관리자 인스턴스를 더 많이 받게된다는 것입니다.
예를 들어, 각 컬렉션에 1 개의 관리자 인스턴스와 3 개의 하위 인스턴스가있는 경우 9 개의 인스턴스가 있습니다. 이런 이유를 이해할 수있다 : Hibernate는
같은select ... from Manager this_
left outer join manager_action actions3_ on this_.id=actions3_.Manager_id
left outer join Action action4_ on actions3_.actions_id=action4_.id
left outer join Manager_Activity activities5_ on this_.id=activities5_.Manager_id
left outer join Activity activity6_ on activities5_.activities_id=activity6_.id
을 보이는 선별 생산 ... 그리고 정말 하나보다 많은 행을 가져옵니다.
왜 이런 일이 발생합니까? 어떻게 해결할 수 있습니까?
감사합니다. JB Nizet! (1) 그러나 Hibernate가 여러 행을 올바른 방법으로 처리 할 수있는 경우를 설명 할 수 있습니까? (2) 두 번째 질문은 추가 행이 추가 쿼리보다 왜 나빠 졌다고 생각합니까? – KutaBeach