什么是JPQL中的SQL ANY运算符?

Ste*_*han 2 java sql oracle hibernate jpa

鉴于以下Oracle sql查询为PreparedStatement:

SELECT *
FROM my_table
WHERE field1 = 'foo'
and field2 =ANY (substr( ? , 1, 2) || '00000000',
                 substr( ? , 1, 4) || '000000',
                 substr( ? , 1, 6) || '0000',
                 substr( ? , 1, 8) || '00',
                 ?
                )
Run Code Online (Sandbox Code Playgroud)

我想翻译成JPQL查询.阅读JPQL文档,substr变得substringANY保持不变.在JPQL中ANY需要一个子查询.

如何将列表更改为子查询?或者我应该使用IN运算符还是应该生成带有一堆OR条件的JPQL字符串?

Oracle 10gR2
Java 5
JPA 2

Luk*_*der 6

考虑到这= ANY(...)相当于IN (...)在SQL中,您可以安全地使用IN.

实际上,IN谓词是根据谓词定义的ANY.SQL 1992标准的摘录:

8.4 <在谓词中>

[...]

<in predicate> ::=
    <row value constructor>
      [ NOT ] IN <in predicate value>
Run Code Online (Sandbox Code Playgroud)

[...]

2)设RVC为<row value constructor>,让IPV为<in predicate value>.

[...]

4)表达

  RVC IN IPV
Run Code Online (Sandbox Code Playgroud)

相当于

  RVC = ANY IPV  
Run Code Online (Sandbox Code Playgroud)

然后,ANY/ SOME <quantified comparison predicate>运算符的定义方式类似于一堆OR连接的谓词.因此答案是:您可以使用两个INOR连接的谓词.

注意:虽然这个答案解释了它们在SQL中的作用,但我很确定类似的东西也适用于JPQL.