我使用 JPA(Hibernate)作为持久层。
我需要添加一个基于正则表达式的 WHERE 子句,
这样的一些模式是 SELECT * FROM TableName where REGEXP_LIKE(ColumnName, 'Pattern')。我从结果中得到的是字符串列表,但我需要从数据库中获取映射实体作为对象而不是字符串。
据我所知,JPQL 可以将结果作为对象返回,但 JPQL 似乎不支持正则表达式,因为它是 Oracle 的专有扩展。
如何将正则表达式应用于 JPQL?我还需要知道什么?
JPQL 中没有完整的正则表达式,但有模式值。根据规格JPQL 2.2(第 188 页) http://download.oracle.com/otndocs/jcp/persistence-2_2-mrel-spec/index.html:
Pattern_value 是字符串文字或字符串值输入参数,其中下划线 (_) 代表任何单个字符,百分号 (%) 字符代表任何字符序列(包括空序列),所有其他字符代表为了他们自己。
[...]
例子:
-
address.phone LIKE ‘12%3’ 对于 ‘123’ ‘12993’ 为 true,对于 ‘1234’ 为 false
-
Sentence.word LIKE ‘l_se’ 对于 ‘lose’ 为 true,对于 ‘loose’ 为 false
-
a word.underscore LIKE ‘_%’ ESCAPE ‘\’ 对于 ‘food’ 为 true,对于 ‘bar’ 为 false
-
address.phone NOT LIKE ‘12%3’ 对于 ‘123’ 和 ‘12993’ 为 false,对于 ‘1234’ 为 true
如果您想要更高级的正则表达式构造,您需要使用本机查询。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)