我在实体之间有一对多的关系。在执行此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;
}
为了简洁起见,我省略了很多代码,但这应该让你对我想要做的事情有了深刻的认识。请注意,关系是在父母一侧定义的,因为我需要父母列表以及从查询中返回的子女。
答案 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...