최대 절전 모드를 사용할 수 있습니까?최대 절전 기준과 다중 참여
select A.something, B.something, C.something, D.something
from A JOIN B on A.id = B.id_fk
JOIN C ON B.id = C.id_fk
JOIN D ON C.id = D.id_fk;
최대 절전 모드를 사용할 수 있습니까?최대 절전 기준과 다중 참여
select A.something, B.something, C.something, D.something
from A JOIN B on A.id = B.id_fk
JOIN C ON B.id = C.id_fk
JOIN D ON C.id = D.id_fk;
나는 정확히 같은 문제를 가지고,이처럼 해결 할 수 있었다있다 :
return criteria.createCriteria(A.class)
.createCriteria("b", "join_between_a_b")
.createCriteria("c", "join_between_b_c")
.createCriteria("d", "join_between_c_d")
.add(Restrictions.eq("some_field_of_D", someValue));
참고 : 코드에서 "b"
, "c"
및 "d"
위 A
, B
및 C
에 속성 이름을 참조 따라서 클래스 (A
클래스의 속성은 b
입니다.
lazy
및 fetch
매개 변수를 A.hbm.xml
에 설정할 필요가 없습니다.
다음 SQL은 어떻습니까? A.fk_id = B.id의 내부 조인 B에서 A.columnA1, B.columnB1, C.columnC1을 선택하고 C.fk_id = B.id의 내부 조인 C를 선택합니다. – maximilianus
이에 대해 별도의 질문을하십시오. – mindas
처럼, 당신의 기준에 페치 모드를 설정하십시오 :
criteria.setFetchMode(..., FetchMode.EAGER)
이 조인 쿼리를 작성합니다. 자세한 내용은 here을 참조하십시오.
Hibernate Reference material에는 setFetchMode를 사용하여 외부 조인과의 연관을 페치하는 몇 가지 좋은 예가 있습니다.
예는 다음과 같습니다 또한 당신에게 유용 할 수 있습니다 information there about different fetching stragies 있습니다
List books = sess.createCriteria(Book.class)
.setFetchMode("chapters", FetchMode.EAGER)
.setFetchMode("reviews", FetchMode.EAGER)
.list();
.
사실 이것은 나에게 효과가 없었기 때문에 내가 게시 한 답변에서와 같이해야만했다. 'D'에 대한 추가 기준이 있었기 때문일 수 있습니다. – mindas
예, 사실 몇이 일의 방법이 있습니다 :
http://stackoverflow.com/questions/8726396/hibernate-criteria-join-with-3-tables 당신을 도울 수있는 언급 한 링크 위 . –