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

Java 如何在EJB命名查询中使用正则表达式,java,orm,jpa,Java,Orm,Jpa,我有类似mysql的查询 选择COUNTDISTINCT MOBILE FROM TBLM_CUSTOMER,其中MOBILE不是REGEXP“^00*0$”且LENGTHMOBILE>=10 我正在使用EJB3.0,我想使用NamedQuery进行相同的查询,使用createQuery也可以进行相同的查询,但我想使用NamedQuery 在EJB3.0中使用NamedQuery可以使用正则表达式吗 首先,REGEXP不是JPA定义的标准JPQL函数,而是特定于平台的SQL。如果它与您当前的JP

我有类似mysql的查询

选择COUNTDISTINCT MOBILE FROM TBLM_CUSTOMER,其中MOBILE不是REGEXP“^00*0$”且LENGTHMOBILE>=10

我正在使用EJB3.0,我想使用NamedQuery进行相同的查询,使用createQuery也可以进行相同的查询,但我想使用NamedQuery


在EJB3.0中使用NamedQuery可以使用正则表达式吗

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

也就是说,如果您使用createQueryString使其工作,那么没有理由不使用NamedQuery。你有没有试过这样的方法:

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

PS:也许这只是一个例子,但是为什么不使用[NOT]LIKE来保持查询的可移植性呢?

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

也就是说,如果您使用createQueryString使其工作,那么没有理由不使用NamedQuery。你有没有试过这样的方法:

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

PS:也许这只是一个例子,但为什么不使用[NOT]LIKE来保持查询的可移植性?

选择COUNTDISTINCT o.MOBILE FROM Customer WHERE o.MOBILE!='^00*0$'和LENGTHo.MOBILE>=10


当Customer是我们的实体bean时,查询工作与EJB中的nativequery一样正常

选择COUNTDISTINCT o.MOBILE FROM Customer where o.MOBILE!='^00*0$'和LENGTHo.MOBILE>=10


当客户是我们的实体bean时,查询工作与EJB中的nativequery一样好

o.MOBILE!='^00*0$' .. 啊?没有regexp?^00*0$我写这篇文章是因为我希望手机中的所有数字都不能包含零。这是mysql简单查询选择COUNTDISTINCT mobile FROM TBLM_CUSTOMER,其中mobile不是regexp“^00*0$”且LENGTHMOBILE>=10;EJB中的这个查询给出了相同的结果-选择COUNTDISTINCT o.MOBILE FROM Customer WHERE o.MOBILE!='^00*0$'和LENGTHo.MOBILE>=10;-我用mysql alsoo.MOBILE的其他正则表达式测试了这个^00*0$' .. 啊?没有regexp?^00*0$我写这篇文章是因为我希望手机中的所有数字都不能包含零。这是mysql简单查询选择COUNTDISTINCT mobile FROM TBLM_CUSTOMER,其中mobile不是regexp“^00*0$”且LENGTHMOBILE>=10;EJB中的这个查询给出了相同的结果-选择COUNTDISTINCT o.MOBILE FROM Customer WHERE o.MOBILE!='^00*0$'和LENGTHo.MOBILE>=10;-我用mysql的其他正则表达式进行了测试,alsoDoes正则表达式在jpql中使用LIKE选项吗?正则表达式在jpql中使用LIKE选项吗?