2

我正在与所有者进行 Cats 的右外连接,我如何才能获得所有者列表?

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);

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

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

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

4

2 回答 2

4

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

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();
于 2013-01-21T18:36:42.563 回答
1

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

于 2013-01-21T13:22:57.120 回答