这看起来非常简单,我无法相信自己没有找到解决方案。我有一个名为PersonBean的bean,它有一个名字。现在我想编写一个finder方法,它接受一个字符串并查找名字中包含该字符串的人,不区分大小写。这是我当前的EJB QL:
SELECT OBJECT(p)
FROM Person p
WHERE (p.name LIKE ?1)
我有两个问题:
lower()
或upper()
的内容。我该怎么做才能有这种行为? 更新:如果重要的话,我正在使用J2EE 1.4版和glassfish 2.1版。 findByString("%john%")
。有没有办法编写EJB QL,以便我可以传递类似findByString("john")
?答案 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