JPQL中的索引元素访问

时间:2010-05-27 20:56:17

标签: hibernate jpa hql eclipselink jpql

是否可以像在HQL中那样在JPQL中进行索引元素访问:

select o from Order o where o.items[0].id = 1234

我在JPA 2规范中找不到相关内容,

我在这里定位EclipseLink JPA,所以如果你想出一个EclipseLink解决方案,那也没关系,尽管首选JPQL标准解决方案。

2 个答案:

答案 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()无法正常工作, 它不能同时支持@OrderedColumnmappedByJPA 2.0 @OrderColumn annotation in Hibernate 3.5