@OneToMany显示集合变量的重复值

时间:2012-07-03 17:01:27

标签: spring hibernate jpa

我正在过滤'Trainer'实体,但不会过滤收集(trainedMonkeys)。 'trainedMonkeys'变量保存所有'Monkey'对象,而不是只保留'isThumb = true'的对象。

有人可以检查我使用的标准是否正确吗?

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

Trainer.java

public class Trainer {  
    private Long trainerId;

    private String trainerName;

    public List<Monkey> trainedMonkeys;

Monkey.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 
<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>> 

1 个答案:

答案 0 :(得分:1)

它应该拥有一切。你误解了Criteria限制。限制过滤返回实体的标准应该满足。它们不会从返回实体中的集合中过滤掉元素。

查询具有相关实体的关系子集的返回实体会使事情变得复杂。想想当这样的实体合并回数据库时会发生什么。

有关主题的更多详细信息,请参阅Hibernate documentation