2016-08-21 81 views
0

我使用的彈簧數據的JPA /休眠/ MySQL的彈簧加載數據的孩子和查詢的子屬性

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

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

我想裝載A和myBs集合裝載所有B S其中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); 
} 

但是我得到的例外太多的作爲,從數據存儲檢索。基本上,它檢索表

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

和而不是建立一個目的,並用3個乙對象填充,它試圖建立3所述的與每一個B對象的對象。

現在我知道提取圖表設法告訴JPA很聰明,但是在這裏它不起作用。我怎樣才能設置它來正確地做到這一點?有沒有一種方法可以像

private A findWhereMyBsPropGreaterThan(Integer prop)然後只是把一個@EntityGraph註釋呢?

回答

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);