2

Cats with Ownersの右外部結合を行っていますが、結果として所有者のリストを取得するにはどうすればよいですか?

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

猫の飼い主は1匹ですが、飼い主はたくさんの猫を飼うことができます。

編集:

その理由は、より多くの関係に基づいて基準に制限を追加できるようにするためです。これについて詳しく説明します。

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

「猫の飼い主は1匹ですが、飼い主はたくさんの猫を飼うことができます」とおっしゃっています。所有者のリストが必要な場合、外部結合やその他の結合を行う必要がない場合、所有者のリストを取得するにはどうすればよいですか。所有者のIDを提供するか、where条件なしですべての所有者を取得します。

于 2013-01-21T13:22:57.120 に答える