如何在JPQL中应用正则表达式?

6
我在使用JPA(Hibernate)作为持久层。
我需要根据正则表达式添加WHERE子句,例如:SELECT * FROM TableName where REGEXP_LIKE(ColumnName, 'Pattern')。我从结果中得到的是字符串列表,但我需要从数据库中获取映射实体作为对象而不是字符串。
据我所知,JPQL可以将结果返回为对象,但是JPQL似乎不支持正则表达式,因为它是Oracle的专有扩展。
我如何将正则表达式应用于JPQL?还需要了解什么其他信息吗?

1
这可能是你问题的答案:http://stackoverflow.com/questions/8985205/does-eclipselink-support-queries-containing-regular-expression - heldt
1
你可能需要使用本地查询。 - ManuPK
1个回答

5
JPQL中没有完整的正则表达式,但有模式值。根据规范JPQL 2.2 (p. 188)

pattern_value是一个字符串字面量或一个字符串型输入参数,在其中下划线(_)代表任何单个字符,百分号(%)字符代表任何字符序列(包括空序列),而所有其他字符则表示它们本身。

[...]

例如:

  • address.phone LIKE ‘12%3’对于‘123’和‘12993’为真,对于‘1234’为假

  • asentence.word LIKE ‘l_se’对于‘lose’为真,对于‘loose’为假

  • aword.underscored LIKE ‘_%’ ESCAPE ‘\’对于‘_foo’为真,对于‘bar’为假

  • address.phone NOT LIKE ‘12%3’对于‘123’和‘12993’为假,对于‘1234’为真

如果您需要更高级的正则表达式构造,请使用本地查询。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接