최대 절전 모드 기준 - N : M 관계의 테이블 쿼리
-
03-07-2019 - |
문제
다음 시나리오에 대한 최대 절전 모드 기준으로 쿼리를 작성하려고합니다.
- 두 개체 : 표시기 및 보고서 (각각 자체 테이블, 클래스 등)
- 표시기는 0에서 많은 보고서에서 0으로 사용할 수 있습니다.
- 보고서는 0에서 많은 지표를 사용합니다
- 따라서 관계를 저장할 교차점 테이블이 있습니다.
- 관계는 수업과 최대 절전 모드 맵핑에서 정의됩니다.
- UI에서 사용자는 하나 또는 많은 보고서 (무엇보다도)를 선택할 수 있으며이 보고서에 사용 된 지표에 대해 DB를 쿼리하고 싶습니다.
다음을 시도했습니다.
criteria.add(Restrictions.in("Reports", selectedReports));
하지만 내가 얻는 것은 이상한 SQL 문입니다.
where this_.Indicator_ID in (?)
그런 다음 JDBC 예외 (누락 된 매개 변수)
어떤 아이디어? 감사.
참고 : 나는 조사했다 최대 절전 모드 기준으로 다수의 모성화를 쿼리합니다, 그러나 허용 된 솔루션은 맞춤형 SQL 스트링을 구축하는 데 있습니다 ...
해결책
Criteria c = session.createCriteria(Indicator.class);
c.add(Restrictions.eq("someField", myObject).createCriteria("reports")
.add(Restrictions.eq("reportName", name);
c.list();
다른 엔티티의 컬렉션에서 개최되는 엔티티에 하위 기준을 작성해야합니다.
String[] selectedReportsId = {"1", "2", "3"};
c.add(Restrictions.eq("someField",myObject).createCriteria("reports")
.add(Restrictions.in("id", selectedReportsId);
그런 다음 여기에서 결과를 변환하는 것에 대한 비트를 확인하십시오.https://docs.jboss.org/hibernate/orm/3.3/reference/en-us/html/querycriteria.html#querycriteria-associations
또한 이것은 당신이 기준으로 할 수있는 일에 대해 약간의 빛을 비출 수 있습니다.http://www.hibernate.org/hib_docs/v3/api/org/hibernate/criterion/restrictions.html
다른 팁
만약 당신이해야한다면, 다음은 "Hibernate HQL hql to-many"를 검색 한 후 다시 돌아온 몇 가지 제안이 있습니다.
http://patf.net/blogs/index.php?blog=2&c=1&pb=1&tb=1&title=many_to_many_in_hql
그리고 최대 절전 모드 포럼에서 :
http://forum.hibernate.org/viewtopic.php?p=2340747&sid=d4c8d2fcc16aed0201F73EB74619692A
그리고 봄 포럼에서 :
http://forum.springframework.org/showthread.php?t=36870
이 도움을 바랍니다.
지금은 이것이 제가 작동하는 방법입니다 (ZMF 덕분).
Criteria subcrit = criteria.createCriteria("Reports");
Disjunction dis = Restrictions.disjunction();
for (Reports r : selectedReports) {
dis.add(Restrictions.idEq(r.getID()));
}
subcrit.add(dis);
이것은 거의 정확히 ZMF가 제안한 것입니다. 내가 추가 한 것은 전달 된 컬렉션에서 기준을 구축하기위한 분리였습니다.
남은 일은 컬렉션을 직접 사용하는 것입니다 ...