我有我的两个实体之间的关系@ManyToMany。当我尝试用自己的孩子来加载父母,父母重复响应的有效载荷。我想解决我的问题EntityGraphs
。
下面是注释的父。
@Entity
@Table(name="Parent_table")
@NamedEntityGraph(
name = "Parent.children",
attributeNodes = @NamedAttributeNode("children"))
public class Parent implements Serializable{
//some extra code
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(
name="join table", joinColumns=@JoinColumn(name="key"),inverseJoinColumns=@JoinColumn(name="key"))
private List<Child> children;
这里是仓库母公司的代码。
@EntityGraph(value = "Parent.children", type = EntityGraphType.LOAD)
public List<Parent> findAll(Predicate predicate);
我有很多对我的两个实体之间的多对多关系。但是,我想导致像
parent1 {
child1,
child2
}
但我得到父母每个组合..
Parent1 {
child1,
child2
}
Parent1 {
child1,
child2
}
在那里我得到parent2。
但我想是让parent1只有一次,不重复。当使用实体图。
如果您使用的entity graph,休眠加入家长和查询子表。这会在结果集的产品,你会得到它的每一个孩子的父实体的引用。
您可以修复使用DISTINCT
关键字查询。借助于Spring数据JPA,你可以做,在2种方式:
findAll
改变方法名findAllDistinctBy
。@Query("SELECT DISTINCT p FROM parent p")
定义自己的查询Hibernate会在您的SQL查询的DISTINCT关键字。您可以通过设置query hint QueryHints.HINT_PASS_DISTINCT_THROUGH
to false
避免这种情况。