许多一对多关系装载实体多次实体图 - 春天JPA数据

问题描述 投票:0回答:1

我有我的两个实体之间的关系@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只有一次,不重复。当使用实体图。

spring hibernate spring-boot spring-data-jpa entitygraph
1个回答
0
投票

如果您使用的entity graph,休眠加入家长和查询子表。这会在结果集的产品,你会得到它的每一个孩子的父实体的引用。

您可以修复使用DISTINCT关键字查询。借助于Spring数据JPA,你可以做,在2种方式:

  1. 您可以从findAll改变方法名findAllDistinctBy
  2. 您可以使用@Query("SELECT DISTINCT p FROM parent p")定义自己的查询

Hibernate会在您的SQL查询的DISTINCT关键字。您可以通过设置query hint QueryHints.HINT_PASS_DISTINCT_THROUGH to false避免这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.