【问题标题】:Hibernate Criteria API & SubsetHibernate 标准 API 和子集
【发布时间】:2014-12-16 13:11:56
【问题描述】:

首先,我是 Hibernate 的新手。

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

实体 A 有 0 .. * 关联的 B。这些 B 之一可能具有设置为 true 的属性“isDefault”。对于每个 A,在此属性设置为 true 的情况下,最多只存在一个 B。

我想获取所有 As 及其默认 B(如果存在),否则 B 应该为空。这是我到目前为止得到的:

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

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

当然,这将导致所有 As 都有一个默认 B,而 A 的所有 B 都附加到 A。

我将不胜感激!

【问题讨论】:

    标签: hibernate criteria subset subquery


    【解决方案1】:

    我认为您需要尝试类似“获取所有 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

    【讨论】:

      【解决方案2】:

      不完全是。

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

      【讨论】:

        猜你喜欢
        • 2015-03-12
        • 1970-01-01
        • 2012-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多