是否可以像在HQL中那样在JPQL中进行索引元素访问:
select o from Order o where o.items[0].id = 1234
我在JPA 2规范中找不到相关内容,
我在这里定位EclipseLink JPA,所以如果你想出一个EclipseLink解决方案,那也没关系,尽管首选JPQL标准解决方案。
答案 0 :(得分:4)
INDEX函数应该可以解决这个问题(实际上我测试了它并确实如此):
SELECT o
FROM Order o JOIN o.items i
WHERE i.id = 1234
AND INDEX(i) = 0
从JPA 2.0规范( 4.6.17.2.2算术函数):
INDEX函数返回一个整数 对应于位置的值 它在有序列表中的参数。该 INDEX功能只能应用于 识别变量表示 订单列所具有的类型 已被指定。
答案 1 :(得分:0)
@Pascal Thivent的回答是正确的。为了使INDEX()
有效,您还需要在实体的收集字段中添加@OrderedColumn
。
请注意,Hibernate中存在一个错误,这会导致INDEX()
无法正常工作,
它不能同时支持@OrderedColumn
和mappedBy
:
JPA 2.0 @OrderColumn annotation in Hibernate 3.5