我使用的是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
注释?
答案 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);