我有一个带有事件列表的 java 实体类 UserBean:
@OneToMany
private List<EventBean> events;
EventBean 有 Date 变量:
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date eventDate;
现在,在 UserBean 中,我想创建一个 NamedQuery,它返回特定范围内的所有日期:
@NamedQuery(name="User.findEventsWithinDates",
query="SELECT u.events FROM UserBean u WHERE u.name = :name AND u.events.eventDate > :startDate AND u.events.eventDate < :endDate")
但上面的查询无法编译。我收到此错误:
The state field path 'u.events.eventDate' cannot be resolved to a valid type.
顺便说一句,我使用EclipseLink版本2.5.0.v20130507-3faac2b。
我该怎么做才能使这个查询工作?谢谢。
Path u.events.eventDate
在 JPQL 中是非法构造,因为不允许通过集合值路径表达式进行导航。在这种情况下u.events
是一个集合值路径表达式。在 JPA 2.0 规范中,这是用以下文字来说明的:
从路径组成路径表达式在语法上是非法的
计算结果为集合的表达式。例如,如果
指定Order,路径表达式o.lineItems.product非法
因为导航到 lineItems 会产生一个集合。这个案例
验证查询字符串时应该产生错误。处理
这样的导航,必须在中声明一个标识变量
FROM 子句范围涵盖 lineItems 集合的元素。
这个问题可以通过使用JOIN来解决:
SELECT distinct(u)
FROM UserBean u JOIN u.events e
WHERE u.name = :someName
AND e.eventDate > :startDate
AND e.eventDate < :endDate
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)