多次加载实体的多对多关系上的实体图-Spring数据JPA
我的两个实体之间有@manytomy关系。当我试着让父母和他们的孩子在一起时,父母会重复回答。我想用多次加载实体的多对多关系上的实体图-Spring数据JPA,spring,hibernate,spring-boot,spring-data-jpa,entitygraph,Spring,Hibernate,Spring Boot,Spring Data Jpa,Entitygraph,我的两个实体之间有@manytomy关系。当我试着让父母和他们的孩子在一起时,父母会重复回答。我想用EntityGraphs解决我的问题 这是带有注释的父对象 @Entity @Table(name="Parent_table") @NamedEntityGraph( name = "Parent.children", attributeNodes = @NamedAttributeNode("children")) public class Parent implements
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;
但是每种组合我都有父母
Parent1 {
child1,
child2
}
Parent1 {
child1,
child2
}
这就是我的父母
但我想要的是只获得一次parent1,而不是重复。
使用实体图时。如果使用,Hibernate将在查询中联接父表和子表。这将在结果集中创建一个产品,并为其每个子实体获取对父实体的引用
您可以在查询中使用DISTINCT
关键字进行修复。使用Spring Data JPA,您可以通过两种方式实现:
findAll
更改为findalldinctby
李>
@query(“选择与父p不同的p”)
Hibernate将在SQL查询中包含DISTINCT关键字。您可以通过设置。父母重复响应负载来避免这种情况。你所说的“响应负载”是什么意思?如果您谈论的是JSON表示,那么
@EntityGraph
不会对您有所帮助。我多次获得父项的每个组合(等于子项的数量),未找到ServiceBundle类型的属性FindDistincAll!当我尝试使用FindDistin时,我得到了这个。很抱歉,我的错误。它必须被找到。我也更新了我的回复。你的博客确实帮了我很多,谢谢你在网站上提供的所有材料。顺便说一句,public List listAll(){Predicate p=null;Long start=System.currentTimeMillis();List lst=repo.findalldinctby(p);log.debug(“DB Time to List parents=“+(System.currentTimeMillis()-start));return lst;}我应该怎么做才能只列出所有的父项一次?我不明白你的问题。你的代码不是只返回一次包含所有家长的列表吗?我已经编辑了这个问题。请看最后添加的信息。
parent1 {
child1,
child2
}
Parent1 {
child1,
child2
}
Parent1 {
child1,
child2
}