spring数据加载子项和子属性查询

时间:2016-08-21 21:45:39

标签: spring-data spring-data-jpa jpql

我使用的是spring-data-jpa / hibernate / mysql

class A{
   private long id;
   private Collection<B> myBs;
}

class B{
   private long id;
   private int property;
}

我想加载带有myBs集合的A,其中包含B

的所有B.property > 5

所以我这样做了:

private interface ARepository extends JpaRepository<A, Long>{

 @Query("SELECT a, b "
        + "FROM A a JOIN a.myBs b ON b.property > :prop"
        + "WHERE a.id= :id ")
 public A getByIdPastB(@Param("id") long id, @Param("prop") Integer prop);
}

但是我得到的例外是从数据存储中检索到太多As。基本上,它检索表

_______________________________
A.id  | B.id  | B.a_id| B.prop
2     | 1     | 2     | 8
2     | 2     | 2     | 11
2     | 3     | 2     | 7

而不是构建一个A对象并填充3个B对象,而是尝试构建3个A对象,每个对象都有一个B对象。

现在我知道fetch图设法告诉JPA对它很聪明,但是在这里它没有用。如何设置它才能正确完成?有没有办法像

这样命名

private A findWhereMyBsPropGreaterThan(Integer prop)然后只在其上加上@EntityGraph注释?

1 个答案:

答案 0 :(得分:0)

好的,这是:

@NamedEntityGraph(name="full", attributeNodes={@NamedAttributeNode("myBs")})
class A{
}

@EntityGraph("full)
@Query("SELECT a"
        + "FROM A a JOIN a.myBs b ON b.property > :prop"
        + "WHERE a.id= :id ")
public A getByIdPastB(@Param("id") long id, @Param("prop") Integer prop);