是否可以像在HQL中一样在 JPQL 中进行索引元素访问:
select o from Order o where o.items[0].id = 1234
我在 JPA 2 规范中找不到相关内容,
我在这里以EclipseLink JPA为目标,所以如果您想出一个 EclipseLink 解决方案,那也没关系,尽管首选 JPQL 标准解决方案。
是否可以像在HQL中一样在 JPQL 中进行索引元素访问:
select o from Order o where o.items[0].id = 1234
我在 JPA 2 规范中找不到相关内容,
我在这里以EclipseLink JPA为目标,所以如果您想出一个 EclipseLink 解决方案,那也没关系,尽管首选 JPQL 标准解决方案。
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 函数只能应用于表示已指定订单列的类型的标识变量。
@Pascal Thivent 的答案是正确的。为了进行INDEX()
工作,您还需要@OrderedColumn
在实体的集合字段上添加一个。
请注意,Hibernate 中有一个错误,它INDEX()
无法按预期工作,它不支持@OrderedColumn
并mappedBy
一起使用:
JPA 2.0 @OrderColumn annotation in Hibernate 3.5