문제

다음 시나리오에 대한 최대 절전 모드 기준으로 쿼리를 작성하려고합니다.

  • 두 개체 : 표시기 및 보고서 (각각 자체 테이블, 클래스 등)
  • 표시기는 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가 제안한 것입니다. 내가 추가 한 것은 전달 된 컬렉션에서 기준을 구축하기위한 분리였습니다.

남은 일은 컬렉션을 직접 사용하는 것입니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top