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()?
答
我认为你的代码不能编译。无论如何 - 因为加入章节会给出一个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);
这将不会编译。 join()不返回一个Map。编译后的代码,并且不使用原始类型。然后我们可以讨论这段代码的作用。 –
解决了这个问题。 – Sunnyday