だから私は以下のように2つの休止状態のポジョを持っています
class Owner{
Integer id;
String name;
Integer age;
String address;
/*
Many more fields here
*/
Set<Cat> cats;
}
class Cat{
Owner owner; //referenced from Owner.id
String color;
}
以下の基準を使用して所有者テーブルを照会しています -
Criteria criteria = session.createCriteria(Owner.class);
criteria.createAlias("cats", "cats");
ProjectionList projList = Projections.projectionList();
projList.add(Projections.property("id"), "id");
projList.add(Projections.property("name"), "name");
projList.add(Projections.property("cats"), "cats");
criteria.setProjection(projList);
criteria.setResultTransformer(Transformers.aliasToBean(Owner.class));
List<Owner> owners = (List<Owner>)criteria.list();
それぞれの猫が入力された所有者のリストが必要です。
プロジェクションを追加しない場合 ( select * と同等)、所有者ごとに猫が配置されます。ただし、所有者テーブルには他の多くのテーブルとの外部キー関係を持つ60を超える列があるため、select *は非常に高価になります。プロジェクションを使用して必要な列のみを選択し、クエリをより高速に実行したいと考えています。そして、プロジェクションやエイリアスを追加すると、所有者を取得しますが、猫は取得しません (各所有者の猫は null です)。
私はこれに対する解決策をたくさん検索し、基準でエイリアスとプロジェクションを作成するすべての方法を試しました。また、カスタム ResultTransformers を使用してみました。プロジェクションを使用している場合、それらのどれも機能しないようです。
他の誰かが同様の問題に直面しましたか? 何か案は?