我在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使用正则表达式?
答案 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