【问题标题】:Hibernate criteria right outer join resulting listHibernate 标准右外连接结果列表
【发布时间】:2013-01-04 05:41:39
【问题描述】:

我正在对 Cats 与 Owners 进行右外连接,我如何才能得到 Owners 列表?

Criteria criteria = session.createCriteria(Cats.class);
List<Owners> list= criteria.createCriteria("owner",JoinType.RIGHT_OUTER_JOIN);

一只猫有一个主人,但一个主人可以有很多只猫。

编辑:

这样做的原因,是为了能够根据更多的关系对标准添加限制,我详细说明一下。

Criteria criteria = session.createCriteria(Cats.class);
criteria.add(Restrictions.or(Restrictions.isNull("breed.pkBreed")).add(Restrictions.ne(breed.desc,"Egyptian cat")));
List<Owners> list= criteria.createCriteria("owner",JoinType.RIGHT_OUTER_JOIN);

在这种情况下,我正在检索所有非埃及猫主人和所有目前没有指定品种的猫主人,这是我的确切场景,但数据不同。

我知道这听起来很奇怪,但这是我要求的确切查询。

另外,即使我不转换列表数据,我也不知道里面有什么,所以我可以迭代它......

【问题讨论】:

    标签: java hibernate hibernate-criteria


    【解决方案1】:

    在对别名感到头疼之后,我得到了我想要的 =)

    Criteria criteria = session.createCriteria(Cats.class,"c");
    criteria.add(Restrictions.isNull("breed.pkBreed"));
    criteria.createCriteria("owner","o",JoinType.RIGHT_OUTER_JOIN,Restrictions.eq(c.breed.desc,"Egyptian cat"))
        .setProjection(Projections.projectionList()
            .add(Projections.property("o.pkOwner").as("pkOwner"))
            .add(Projections.property("o.name").as("name"))
        .setResultTransformer(Transformers.aliasToBean(Owners.class));
    List<Owners> list=criteria.list();
    

    【讨论】:

      【解决方案2】:

      正如你所说的“一只猫有一个主人,但一个主人可以有很多只猫。”如果您想要所有者列表,那么您如何获取所有者列表,因此不需要进行外部联接或任何其他联接,只需提供所有者的 ID 或获取所有所有者而无需任何位置条件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-05
        • 2011-10-08
        • 1970-01-01
        • 2016-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多