Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多次加载实体的多对多关系上的实体图-Spring数据JPA_Spring_Hibernate_Spring Boot_Spring Data Jpa_Entitygraph - Fatal编程技术网

多次加载实体的多对多关系上的实体图-Spring数据JPA

多次加载实体的多对多关系上的实体图-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

我的两个实体之间有@manytomy关系。当我试着让父母和他们的孩子在一起时,父母会重复回答。我想用
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
    }