4

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

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

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

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

4

2 回答 2

5

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 函数只能应用于表示已指定订单列的类型的标识变量。

于 2010-05-27T21:53:43.090 回答
1

@Pascal Thivent 的答案是正确的。为了进行INDEX()工作,您还需要@OrderedColumn在实体的集合字段上添加一个。

请注意,Hibernate 中有一个错误,它INDEX()无法按预期工作,它不支持@OrderedColumnmappedBy一起使用: JPA 2.0 @OrderColumn annotation in Hibernate 3.5

于 2015-02-20T18:28:57.260 回答