Hibernate Criteria API&子集

时间:2014-10-21 10:31:08

标签: hibernate criteria subset subquery

首先,我是Hibernate的新手。

假设我们有一个如下数据结构:

实体A具有0 .. *关联的Bs。其中一个B可能将属性“isDefault”设置为true。对于每个A,只有一个B存在于max,并且此属性设置为true。

我希望得到所有As的默认B(如果存在),否则B应该为null。这是我到现在所得到的:

Criteria c = session.createCriteria(A.class);

c.createCriteria("bs").add(Restrictions.eqOrIsNull("isDefault", true));

当然,这将导致所有As具有默认B,其中A的所有B都附加到A.

我将不胜感激任何帮助!

2 个答案:

答案 0 :(得分:0)

我认为你需要尝试类似“获取所有A,其中B为空或B将字段'isDefault'设置为true”:

Criteria c = session.createCriteria(A.class);
Disjunction disjunction = Restrictions.disjunction();
c.add(disjunction);
disjunction.add(Restrictions.isNull("bs"));
c.createAliase("bs", "b");
disjunction.add(Restrictions.eq("b.isDefault", true));

请点击此链接:https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html

答案 1 :(得分:0)

不完全是。

它实际上并不取决于所有B的子集是否为空。我需要得到所有的As。如果任何B附加到这些A中的任何一个,则只应将B附加/显示给A,这是A的默认值。