@Neil:这是一个很好的暗示,它可能是特定于数据库的,而不是特定于JPA的。
使用 Oracle 11gR2,我发现:Oracle Text 查询中的特殊字符 http://docs.oracle.com/cd/B28359_01/text.111/b28304/cqspcl.htm
“要转义反斜杠转义字符,请使用 \。”
但是,我不明白为什么在使用 JPA 时需要转义反斜杠,但在 PL/SQL Developer 中,我不能转义。如果我在 PL/SQL Developer 中转义反斜杠,我会收到一条错误消息。
而且openJPA的跟踪日志显示,将'\'提交的SQL变成了'\',这很令人困惑。
关于 JDBC:
这Oracle JDBC 文档/LIKE 转义字符 https://docs.oracle.com/cd/E11882_01/java.112/e16548/apxref.htm#JJDBC28921提到:
“如果你想使用反斜杠字符()作为转义字符,那么你必须输入两次,即\。例如:”
ResultSet rset = stmt.executeQuery("SELECT empno FROM emp
WHERE ename LIKE '\\_%' {escape '\\'}");
这是一个简单的 Java 转义,Java 内部结果是单个反斜杠字符。
我还必须在正则表达式中转义,而不仅仅是在 LIKE 中:
SELECT regexp_replace(
listagg(h.node_id, ',') WITHIN GROUP (ORDER BY h.node_id),
'([^,]+)(,\1)+', '\1') as node_ids
所以我仍然很困惑,因为它既没有在 JPA 跟踪日志中也没有在 PL/SQL Developer 中执行时转义。 JPA 跟踪应该是发送到数据库驱动程序的 SQL。