我正在尝试使用hibernate标准为以下场景构建查询:
我尝试了以下内容:
criteria.add(Restrictions.in("Reports", selectedReports));
但我得到的只是一个带有
的奇怪的SQL语句where this_.Indicator_ID in (?)
然后是JDBC异常(缺少参数)
有什么想法吗?感谢。
注意:我已查看Querying ManyToManyrelationship with Hibernate Criteria,但接受的解决方案是构建自定义sql-string ...
答案 0 :(得分:4)
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
答案 1 :(得分:0)
如果必须,这里有一些建议谷歌在搜索“hibernate hql many-to-many”之后回来了:
http://patf.net/blogs/index.php?blog=2&c=1&more=1&pb=1&tb=1&title=many_to_many_in_hql
来自Hibernate论坛:
http://forum.hibernate.org/viewtopic.php?p=2340747&sid=d4c8d2fcc16aed0201f73eb74619692a
来自Spring论坛:
http://forum.springframework.org/showthread.php?t=36870
希望这些帮助。
答案 2 :(得分:0)
目前,这就是我开始工作的方式(感谢zmf)。
Criteria subcrit = criteria.createCriteria("Reports");
Disjunction dis = Restrictions.disjunction();
for (Reports r : selectedReports) {
dis.add(Restrictions.idEq(r.getID()));
}
subcrit.add(dis);
这几乎正是zmf所建议的,我添加的只是从传递的Collection中构建标准的分离。
剩下要做的就是尝试直接使用该集合......