JPA OneToMany重复的孩子

时间:2017-12-01 22:23:36

标签: jpa one-to-many

我正在尝试实施OneToMany关系并且在选择子记录时非常困难。

例如:Parent P1有3个Child个实体,Parent P2有2个Child个实体,比如说

  • P1具有C1,C2,C3
  • P2具有C4,C6

但下面的代码返回

  • P1具有C1,C1,C1
  • P2具有C1,C1

有趣的是,子实体的数量是正确的,但数据本身只是第一条记录的副本。我尝试设置不同,但似乎没有帮助。

 CriteriaBuilder criteriaBuilder = db2EntityManager.getCriteriaBuilder();
 CriteriaQuery<Parent> searchQuery = criteriaBuilder.createQuery(Parent.class);
 Root<Parent> aRoot = searchQuery.from(Parent.class);

 //Constructing list of parameters
 List<Predicate> predicates = new ArrayList<>();

 //Adding predicates in case of parameter not being null
 predicates.add(criteriaBuilder.equal(aRoot.get("a"), "A"));
 predicates.add(criteriaBuilder.equal(aRoot.get("b"), "B"));
 predicates.add(criteriaBuilder.equal(aRoot.get("c"), "C"));

 //query itself
 searchQuery.select(aRoot).where(predicates.toArray(new Predicate[]{})).distinct(true);

 TypedQuery<Parent> query = db2EntityManager.createQuery(searchQuery);
 parentEntities = query.getResultList();

1 个答案:

答案 0 :(得分:0)

原来问题在于Child实体中的Primary Key。复合键未返回唯一记录。