JPA / Hibernate重复记录

时间:2013-05-02 15:02:02

标签: hibernate jpa duplicates

我在实体之间有一对多的关系。在执行此JPQL查询时:

SELECT parent FROM Parent parent JOIN parent.child child WHERE ...

当父母有2个孩子时,我得到重复记录,父母只有一个孩子时只有一个,没有孩子时没有(没有孩子没事时没有)。请注意,SQL数据库中没有Parent的副本。

实体声明如下:

@Entity(...)
public class Parent {

    @Id
    Long parentId;

    @OneToMany(mappedBy = "parentID")
    List<Child> children;
}

@Entity(...)
public class Child {a

    Long parentId;
}

为了简洁起见,我省略了很多代码,但这应该让你对我想要做的事情有了深刻的认识。请注意,关系是在父母一侧定义的,因为我需要父母列表以及从查询中返回的子女。

1 个答案:

答案 0 :(得分:1)

您可以使用DISTINCT关键字删除重复项:

SELECT DISTINCT parent FROM Parent parent JOIN parent.child child WHERE ...

编辑:DISTINCT关键字用于从查询结果中删除重复项,无论是否存在这些重复项。有时原因是重复的DB条目。但更常见的情况是,重复是JOIN语句的结果,因此您的用例完全合法。

但是,您可以通过使关系双向来避免显式连接和DISTINCT关键字。然后,您可以通过导航使用隐式联接:

SELECT parent FROM Parent parent WHERE parent.children...