JPA本机查询结果返回重复的子对象

我在我的数据库中有一个父表和一个子表,并且在它们相应的实体类中有一个OneToMany映射。 子表具有一个外键parent_id。 我使用Hibernate和MySQL DB的JPA 2。

我希望根据某个父属性和SQL本机查询检索所有父对象及其相应的子对象。

为此,我有一个SqlResultSetMapping如下:

@SqlResultSetMapping(name="ParentsWithChildren",
       entities={ @EntityResult(entityClass = Parent.class),
                  @EntityResult(entityClass = Child.class)})

我询问如下:

String queryString = "select p.*, c.* from parent p left join child c on p.id = c.parent_id where p.property = <some_property>";
Query query = entityManager.createNativeQuery(queryString, "ParentsWithChildren");
List<Object[]> resultList =  query.getResultList();

在遍历结果列表时,我发现子表中的不同行有重复的子对象,如输出中所示:

for(Object obj[]: resultList){
      Parent parent = (Parent) obj[0];
      Child child = (Child) obj[1];
      System.out.println("Parent: " + parent + ", Child: " + child);
}

输出:

Parent: Parent@3966c600, Child: Child@1
Parent: Parent@3966c600, Child: Child@1
Parent: Parent@3966c600, Child: Child@1
Parent: Parent@3966c600, Child: Child@1
Parent: Parent@3966c600, Child: Child@1
Parent: Parent@3966c600, Child: Child@1
Parent: Parent@3966c600, Child: Child@1
Parent: Parent@3966c600, Child: Child@1

我不明白这是为什么。 有什么方法(映射)使用本机查询来获取所有(不同的)子对象。 获取列名可以工作,并不需要相应的对象映射,但我想要获取子表的所有列,因此更喜欢用户c。*在sql查询中。


我会使用正常的HQL查询而不是本地查询。 在HQL中,您可以使用fetch连接:

"select p.*, c.* from parent p left join fetch child c on p.id = c.parent_id where p.property = <some_property>"

通过使用单个选择,可以将读取连接集合与其父对象一起初始化。

链接地址: http://www.djcxy.com/p/37055.html

上一篇: JPA native query result returns duplicate child objects

下一篇: Hibernate Query Criteria for mappings involving inheritance