如果我有一個實體Person
一些懶惰的集合(Cars
,Bills
,Friends
,...),並希望寫一個JpaRepository法,讓我所有的人indluding預先抓取Cars
,是這可能嗎?JpaRepository:取特定的懶惰集合
我知道一個人可以在單個物體上做到這一點,但是這對某些人來說是可能的嗎?
如果我有一個實體Person
一些懶惰的集合(Cars
,Bills
,Friends
,...),並希望寫一個JpaRepository法,讓我所有的人indluding預先抓取Cars
,是這可能嗎?JpaRepository:取特定的懶惰集合
我知道一個人可以在單個物體上做到這一點,但是這對某些人來說是可能的嗎?
使用以下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();
}
是的,Spring Data JPA提供了非常方便的@EntityGraph
註釋。它可以用來微調查詢中使用的實體圖形。每個JPA查詢都使用隱式entitygraph,它指定根據關係fetchtype設置,哪些元素是熱切或懶惰地獲取的。如果你想要一個特定的關係被急切地提取,你需要在entitygraph中指定它。
@Repository
public interface PersonRepository extends CrudRepository<Person, Long> {
@EntityGraph(attributePaths = { "cars" })
Person getByName(String name);
}
[休眠彈簧JPA負載只有特定的懶惰關係](的可能的複製https://stackoverflow.com/questions/40932584/hibernate-spring-jpa-load-only-specific-lazy -關係) – crizzis