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

时间:2017-10-21 15:02:06

标签: dictionary jpa join key-value

JPA:映射连接值()路径示例,

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

最后两行有什么区别? Map join是地图值类型的连接,为什么需要value()?

1 个答案:

答案 0 :(得分:-1)

我认为您的代码无法编译。 无论如何 - 因为章节的连接给了MapJoin。 地图总是由一个键和一个值组成。

因此,如果您想访问该值(例如章节),则必须调用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);