Hibernate标准由自然id列表组成

时间:2013-02-07 03:04:43

标签: hibernate criteria

我正在尝试使用自然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);

感谢。

1 个答案:

答案 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中,这种奇怪之处也会导致优化器做出糟糕的选择。