van*_*ten 6 regex hibernate jpql
我使用 JPA(Hibernate)作为持久层。
我需要添加一个基于正则表达式的 WHERE 子句,例如 SELECT * FROM TableName where REGEXP_LIKE(ColumnName, 'Pattern') 。我从结果中得到的是字符串列表,但我需要从数据库中获取映射实体作为对象而不是字符串。
据我所知,JPQL 可以将结果作为对象返回,但 JPQL 似乎不支持正则表达式,因为它是 Oracle 的专有扩展。
如何将正则表达式应用于 JPQL?我还需要知道什么?
JPQL 中没有完整的正则表达式,但有模式值。根据规范JPQL 2.2(第 188 页):
\n\n\nPattern_value 是字符串文字或字符串值输入参数,其中下划线 (_) 代表任何单个字符,百分号 (%) 字符代表任何字符序列(包括空序列),所有其他字符代表为了他们自己。
\n[...]
\n例子:
\n\n
\n- \n
address.phone LIKE \xe2\x80\x9812%3\xe2\x80\x99 对于 \xe2\x80\x98123\xe2\x80\x99 \xe2\x80\x9812993\xe2\x80\x99 为 true,对于 \xe2 为 false \x80\x981234\xe2\x80\x99
\n- \n
asentence.word LIKE \xe2\x80\x98l_se\xe2\x80\x99 对于 \xe2\x80\x98lose\xe2\x80\x99 为 true,对于 \xe2\x80\x98loose\xe2\x80\x99 为 false
\n- \n
aword.underscored LIKE \xe2\x80\x98_%\xe2\x80\x99 ESCAPE \xe2\x80\x98\\\xe2\x80\x99 对于 \xe2\x80\x98_foo\xe2\x80\x99 为 true,对于 \xe2\x80\x99 为 false \xe2\x80\x98bar\xe2\x80\x99
\n- \n
address.phone NOT LIKE \xe2\x80\x9812%3\xe2\x80\x99 对于 \xe2\x80\x98123\xe2\x80\x99 和 \xe2\x80\x9812993\xe2\x80\x99 为 false,对于 \xe2\x80\x99 为 true \xe2\x80\x981234\xe2\x80\x99
\n
如果您想要更高级的正则表达式构造,您需要使用本机查询。
\n| 归档时间: |
|
| 查看次数: |
10485 次 |
| 最近记录: |