我正在过滤'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
<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>
答案 0 :(得分:1)
它应该拥有一切。你误解了Criteria限制。限制过滤返回实体的标准应该满足。它们不会从返回实体中的集合中过滤掉元素。
查询具有相关实体的关系子集的返回实体会使事情变得复杂。想想当这样的实体合并回数据库时会发生什么。
有关主题的更多详细信息,请参阅Hibernate documentation。