我有几个单向@OneToMany
关系:
@Entity
@Table(name = "Parent")
public class Parent {
@OneToMany
@JoinColumn(name = "ParentID")
private List<Child1> childList1;
@OneToMany
@JoinColumn(name = "ParentID")
private List<Child2> childList2;
}
@Entity
@Table(name = "Child1")
public class Child1 {
private int someProperty;
// other properties
}
@Entity
@Table(name = "Child2")
public class Child2 {
private int someProperty;
// other properties
}
我试图让所有父母child1.someProperty=10
和child2.someProperty=20
。有人可以帮忙吗?
我尝试使用Join:
Root<Parent> root = criteria.from(Parent.class);
ListJoin<Parent, Child1> join = root.join(Parent_.childList1);
criteriaBuilder.equal(join.get(Child1_.someProperty), 10);
但是,对于每个Parent
:
Child1
Parent----Child1(someProperty=10)
Parent----Child1(someProperty=10)
我希望结果是:
/Child1(someProperty=10)
/
Parent/---Child1(someProperty=10)
\
\
\Child2(someProperty=20)
有人可以帮忙吗?我更喜欢JPA Criteria,但JPQL很好。
我准备对我的实体结构进行微小的改动,如果它有帮助(次要的改变,比如使关系双向化?)
谢谢。
顺便说一句,我使用hibernate作为JPA实现。
答案 0 :(得分:-1)
您必须在查询中使用setDistinct(true)
。
您获得的结果是逐行映射到实体的有效联接结果。添加distinct将启用根聚合,从而导致父母拥有N
个孩子,因为我相信你的期望。