2017-10-21 82 views
0

JPA:圖加入值()路徑例如,JPA爲什麼MapJoin值()路徑需要

@Entity 
public class Book { 
    @OneToMany 
    @MapKey 
    Map<Long, Chapter> chapters; 
} 

@Entity 
public class Chapter { 
    @Id Long id; 
    String name; 
} 



CriteriaQuery criteriaQuery = criteriaBuilder.createCriteriaQuery(Book.class); 
Root root = criteriaQuery.from(Book.class); 
MapJoin<Book, Long, Chapter> chapters = (MapJoin)root.join("chapters"); 
Path chapterName = chapters.get("name") 
// or 
Path chapterName = chapters.value().get("name"); 

是什麼最後兩行之間的區別?地圖連接是對地圖值類型的連接,爲什麼需要value()?

+0

這將不會編譯。 join()不返回一個Map。編譯後的代碼,並且不使用原始類型。然後我們可以討論這段代碼的作用。 –

+0

解決了這個問題。 – Sunnyday

回答

-1

我認爲你的代碼不能編譯。無論如何 - 因爲加入章節會給出一個MapJoin。 地圖總是由一個Key和一個Value組成。

所以,如果你想訪問的價值(如章),那麼你必須調用value()。

CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Book.class); 
Root root = criteriaQuery.from(Book.class); 
MapJoin join = root.join(Book_.chapters); 
Path path = join.value().get(Chapter_.name); 
+0

MapJoin 章節=(MapJoin)root.join(「章節」); 路徑chapterName = chapters.get(「name」);它給出了相同的路徑。對?因爲地圖連接目標類型是章節。 – Sunnyday

+0

引用'MapJoin.value()'的javadoc:'創建一個與地圖值對應的路徑表達式。這種方法**僅供文體使用**:它只是返回這個。 – crizzis