如何在EJB命名查询中使用正则表达式

时间:2010-10-30 06:26:33

标签: java orm jpa

我在mysql中查询

SELECT COUNT(DISTINCT MOBILE)FROM TBLM_CUSTOMER,MOBILE NOT REGEXP'^ 00 * 0 $'和LENGTH(MOBILE)> = 10;

我正在使用EJB 3.0,我想使用NamedQuery进行相同的查询,使用createQuery也可以,但我想使用NamedQuery。

是否可以在EJB 3.0中使用NamedQuery使用正则表达式?

2 个答案:

答案 0 :(得分:2)

首先,REGEXP不是JPA定义的标准JPQL函数,而是特定于平台的SQL。如果它适用于您当前的JPA提供程序(其中一些可能会将WHERE子句中特定于平台的SQL直接传递给数据库,其中一些可能支持扩展给定的方言),则无法保证可移植性(如果这很重要)。 / p>

话虽如此,如果您使用createQuery(String)使其工作,则没有理由不能使用NamedQuery。你尝试过这样的事情吗?

SELECT COUNT(DISTINCT MOBILE) FROM TBLM_CUSTOMER WHERE MOBILE NOT REGEXP :regexp AND LENGTH(MOBILE) >= :length;

PS:也许这仅仅是一个例子,但为什么不使用[NOT] LIKE来保持您的查询的便携性?

答案 1 :(得分:-1)

SELECT COUNT(DISTINCT o.MOBILE)FROM Customer WHERE o.MOBILE!='^ 00 * 0 $'AND LENGTH(o.MOBILE)> = 10;

其中Customer是我们的实体bean,查询工作在EJB

中可以作为nativequery