1

フィルタリングされた「Trainer」エンティティを取得していますが、コレクション (trainedMonkeys) はフィルタリングされていません。「trainedMonkeys」変数は、「isThumb = true」のオブジェクトだけを保持するのではなく、すべての「Monkey」オブジェクトを保持しています。

私が使用している以下の基準が正しいかどうか誰かが確認できますか?

@SuppressWarnings("unchecked")
    public List<Trainer> listTrainers() {         
        Criteria crit = sessionFactory.getCurrentSession().createCriteria(Trainer.class)
        .createAlias("trainedMonkeys", "tm")
        .add(Restrictions.eq("tm.isThumb", true))
        .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

トレーナー.java

public class Trainer {  
    private Long trainerId;

    private String trainerName;

    public List<Monkey> trainedMonkeys;

モンキー.java

public class Monkey {

    private Long id;

    private String monkeyName;  

    private boolean isThumb;

コントローラーで以下のコードを実行していますが、

for (Trainer trainer : trainerList){  
            System.err.println("<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>");  
            System.err.println("Trainer ID*****"+trainer.getTrainerId());  
            System.err.println("Trainer Name******"+trainer.getTrainerName());  
            monkeyList = trainer.getTrainedMonkeys();  
            for (Monkey monkey : monkeyList){  
                System.err.println("Monkey ID*****"+monkey.getId());  
                System.err.println("Monkey Name*****"+monkey.getMonkeyName());  
            }  
            System.err.println("<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>");  
        }

出力は次のとおりです (Monkey_2 と Monkey_6 のみが基準を満たすため、存在する必要がある唯一のオブジェクトです) 助けてください。

<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>> 
Trainer ID*****88 
Trainer Name******TrainerSachin 
Monkey ID*****87 
Monkey Name*****Monkey_1 
Monkey ID*****88 
Monkey Name*****Monkey_2 
Monkey ID*****89 
Monkey Name*****Monkey_3 
<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>> 
<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>> 
Trainer ID*****89 
Trainer Name******TrainerVinod 
Monkey ID*****90 
Monkey Name*****Monkey_5 
Monkey ID*****91 
Monkey Name*****Monkey_6 
Monkey ID*****92 
Monkey Name*****Monkey_7 
<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>> 
4

1 に答える 1

1

それはすべてを保持する必要があります。基準の制限を誤解しています。返されたエンティティが満たす必要がある基準をフィルターします。返されたエンティティのコレクションから要素を除外しません。

関連するエンティティへの関係のサブセットを持つエンティティを返すクエリは、物事を複雑にします。そのようなエンティティがデータベースにマージされたときに何が起こるかを考えてください。

件名の詳細については、Hibernate のドキュメントを参照してください。

于 2012-07-03T18:17:23.637 に答える