在JPA标准中使用fetch join时,没有可以看到的导航方法。以下是一个例子。
Root<UserTable> root = criteriaQuery.from(entityManager.getMetamodel().entity(UserTable.class));
Fetch<UserTable, StateTable> fetch = root.fetch(UserTable_.stateTable, JoinType.INNER);
要浏览相关实体,需要将此Fetch
类型转换为联接,如下所示。
Join<UserTable, StateTable> join = (Join<UserTable, StateTable>) root.fetch(UserTable_.stateTable, JoinType.INNER);
导演方法get()
在此演员之后可用,
join.get(UserTable_.firstName);
这种类型是否可以移植(虽然它适用于EclipseLink(2.5.1)和Hibernate(4.3.5))?有没有其他方法可以做同样的事情?有没有具体的原因为什么标准提取连接不支持导航方法?
更新: (我仍然认为这只是一个部分答案。因此,未在答案部分写出)
here James已经很好地发现FETCH JOIN
为什么OneToMany
中的导航方法(包括JPQL中的别名)非常不鼓励,特别是{{1}关系(因此不会在FETCH JOIN
s中直接提供/支持):
EclipseLink允许您在
JOIN FETCH
上使用别名。这种支持 用于OneToOne
和ManyToOne
关系,以避免。{ 加入它只是为了得到一个别名,以及允许使用它ORDER BY
或以其他方式不会过滤结果和 改变对象的构建方式。但是,没有什么可以阻止你 从与OneToMany
一起使用它来过滤所提取的内容OneToMany
结果。
您可能希望使用给定的示例来阅读整个博客。根据我的经验,Hibernate(最新版本)也允许我们这样做。
一般情况下,我个人不会在OneToMany
关系中使用别名来浏览目标实体(具有外键的实体),实际上在实际项目中最多不需要,但是在OneToOne
和/或ManyToOne
。
答案 0 :(得分:-1)
你可以打电话
Join<UserTable, StateTable> join = root.join("prop", JoinType.INNER);