JPA为什么MapJoin值()路径需要

JPA为什么MapJoin值()路径需要

问题描述:

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

我认为你的代码不能编译。无论如何 - 因为加入章节会给出一个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