我正在尝试使用自然ID列表创建hibernate标准。我在这里看到了这个例子 http://docs.jboss.org/hibernate/core/3.5/reference/en-US/html/querycriteria.html#query-criteria-naturalid但它只显示查询单个记录的示例:
session.createCriteria(User.class)
.add(Restrictions.naturalId()
.set("name", "gavin")
.set("org", "hb"));
有没有比下面的例子更好的方法来制作自然ID列表?
Junction junction = Restrictions.disjunction()
.add(Restrictions.naturalId()
.set("name", "gavin")
.set("org", "hb"))
.add(Restrictions.naturalId()
.set("name", "jdoe")
.set("org", "rh"));
session.createCriteria(User.class)
.add(junction);
感谢。
答案 0 :(得分:2)
根据我的经验,没有。原因是由于某些实现中SQL的局限性。当您尝试在SQL中对此进行短语时,它会变得棘手......
不支持数据库支持的伪SQL ...
select * from table where (name, org) in values ( ('gavin', 'hb'), ('jdoe', 'hr'))
Hibernate最终编写的内容是...的常见交叉数据库方式。
select * from table where (name = 'gavin' and org = 'hr') OR (name = 'jdoe' and org = 'hr')
我已经对这个问题进行了投票,并添加到我的收藏夹中,希望我错了,并且有更好的方法。我知道在DB2 for zOS中,这种奇怪之处也会导致优化器做出糟糕的选择。