java – hibernate OneToMany标准返回重复项

前端之家收集整理的这篇文章主要介绍了java – hibernate OneToMany标准返回重复项前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个由以下映射的关联:
  1. @Entity
  2. public class Parent
  3. {
  4. ...
  5. @Id
  6. @Column(name = "parent_id")
  7. private Long id;
  8.  
  9. @OneToMany(mappedBy = "parent")
  10. @OrderBy("id")
  11. private List<Child> children;
  12. ...
  13. }
  14.  
  15. @Entity
  16. public class Child
  17. {
  18. ...
  19. @Id
  20. @Column(name = "child_id")
  21. private Long id;
  22.  
  23. @ManyToOne
  24. @NotFound(action = NotFoundAction.IGNORE)
  25. @JoinColumn(name = "parent_id")
  26. private Parent parent;
  27.  
  28. @Column
  29. private Boolean enabled;
  30. ...
  31. }

我想使用Criteria API返回包含一个或多个具有属性enabled = false的子实体的所有Parent实体的列表.我不希望查询过滤映射的子集合.

例如,给出以下内容

  1. Parent A
  2. - Child A enabled=true
  3. - Child B enabled=false
  4.  
  5. Parent B
  6. - Child A enabled=false
  7. - Child B enabled=false
  8.  
  9. Parent C
  10. - Child A enabled=true
  11. - Child B enabled=true

查询应返回以下内容

  1. Parent A
  2. - Child A enabled=true
  3. - Child B enabled=false
  4.  
  5. Parent B
  6. - Child A enabled=false
  7. - Child B enabled=false

到目前为止,我使用以下Criteria查询

  1. Criteria crit = session.createCriteria(Parent.class);
  2. crit.createCriteria("children").add(Restrictions.eq("enabled",false));
  3. List<Parent> result = crit.list();
  4. return result;

然而,它返回相当于

  1. Parent A
  2. - Child A enabled=true
  3. - Child B enabled=false
  4.  
  5. Parent B
  6. - Child A enabled=false
  7. - Child B enabled=false
  8.  
  9. Parent B
  10. - Child A enabled=false
  11. - Child B enabled=false

即,它为每个子元素返回单个父记录(填充子集合),其中enabled = false

有谁知道如何在这种情况下只返回唯一的父元素?

建议表示赞赏,p.

@R_404_323@

你需要添加一个不同的,例如
  1. criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

应该适合你的情况

猜你在找的Java相关文章