EJB QL中不区分大小写的搜索

时间:2010-08-04 11:19:33

标签: java java-ee ejb ejbql ejb-2.x

这看起来非常简单,我无法相信自己没有找到解决方案。我有一个名为PersonBean的bean,它有一个名字。现在我想编写一个finder方法,它接受一个字符串并查找名字中包含该字符串的人,不区分大小写。这是我当前的EJB QL:

SELECT OBJECT(p)
FROM Person p
WHERE (p.name LIKE ?1)

我有两个问题:

  1. 我希望搜索不区分大小写(上面区分大小写),我在EJB QL中找不到类似lower()upper()的内容。我该怎么做才能有这种行为? 更新:如果重要的话,我正在使用J2EE 1.4版和glassfish 2.1版。
  2. 我必须将一个丑陋的字符串传递给方法,即findByString("%john%")。有没有办法编写EJB QL,以便我可以传递类似findByString("john")
  3. 的内容

2 个答案:

答案 0 :(得分:2)

EJB 2.x实体bean中使用的EJB-QL(不要与JPA和EJB3实体bean中使用的JPQL混淆)非常有限。尽管EJB 2.1中的语言有some additions,但我认为没有上/下功能。

我不知道你在运行什么容器,但JBoss已经对EJB-QL(称为JBossQL)进行了一些扩展,并具有 UCASE 功能。

答案 1 :(得分:1)

关于你的第二个问题,EJB QL 2.1中有一个CONCAT函数,所以我认为以下内容应该有效:

WHERE(p.name LIKE CONCAT('%',CONCAT(?1,'%')))

编辑:以上不起作用,因为ql语法只允许LIKE表达式中的文字字符串和输入参数,这实际上是限制性的。应该可以通过使用LOCATE函数来实现相同的效果:

WHERE LOCATE(p.name, ?1) <> 0