2017-06-22 43 views
0

如果我有一個實體Person一些懶惰的集合(CarsBillsFriends,...),並希望寫一個JpaRepository法,讓我所有的人indluding預先抓取Cars,是這可能嗎?JpaRepository:取特定的懶惰集合

我知道一個人可以在單個物體上做到這一點,但是這對某些人來說是可能的嗎?

+0

[休眠彈簧JPA負載只有特定的懶惰關係](的可能的複製https://stackoverflow.com/questions/40932584/hibernate-spring-jpa-load-only-specific-lazy -關係) – crizzis

回答

1

使用以下JPA查詢來獲取這兩個表數據。這裏使用jpa查詢來獲取汽車。

「提取」連接允許使用單個選擇將關聯或值集合與其父對象一起初始化。這在收集的情況下特別有用。它有效地覆蓋了關聯和集合映射文件的外連接和惰性聲明。

更多解釋見上join fetch

此使用「連接抓取」,獲取對象熱切。

public interface CustomRepository extends JpaRepository<Person, Long> { 

    @Query("select person from PersonModel as person left join fetch person.cars as cars") 
    public PersonModel getPersons(); 
} 
2

是的,Spring Data JPA提供了非常方便的@EntityGraph註釋。它可以用來微調查詢中使用的實體圖形。每個JPA查詢都使用隱式entitygraph,它指定根據關係fetchtype設置,哪些元素是熱切或懶惰地獲取的。如果你想要一個特定的關係被急切地提取,你需要在entitygraph中指定它。

@Repository 
public interface PersonRepository extends CrudRepository<Person, Long> { 
    @EntityGraph(attributePaths = { "cars" }) 
    Person getByName(String name); 
} 

​​