【发布时间】:2014-07-13 00:13:38
【问题描述】:
带有 Oracle 11g 的 spring data jpa 1.4.3。
我有一个这样的实体:
class LinkRecord {
String value;
int linkType;
...
}
我使用 (value, linkType) 作为复合索引。 对于给定的 (v, t) 元组列表,我们需要选择 DB 中的所有记录,使得 value = v, linkType = t。
基本上,我想构建这个查询:
SELECT * FROM LINK_RECORD WHERE (VALUE, LINK_TYPE) IN (('value1', 0), ('value2', 25), ...)
IN 子句中的列表作为参数传入。
由于我们正在处理大量数据,因此非常不希望逐个查询元组。
在我的存储库中,我尝试过这个:
@Query("select r from LinkRecord r where (r.value, r.linkType) in :keys")
List<LinkRecord> findByValueAndType(@Param("keys")List<List<Object>> keys);
其中 keys 是(长度为 2 的列表)的列表。这让我得到 ORA_00920:无效的关系运算符。
有没有办法使用命名查询来完成这项工作?还是我必须求助于原生 sql?
【问题讨论】:
标签: sql hibernate jpa spring-data-jpa named-query