代码之家  ›  专栏  ›  技术社区  ›  phunehehe

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

  •  2
  • phunehehe  · 技术社区  · 14 年前

    这看起来很简单,我不敢相信我自己还没有找到解决方案。我有一个叫Personbean的bean,它有一个名字。现在,我想写一个finder方法,它取一个字符串,并以不敏感的方式查找名字中包含该字符串的人。这是我当前的EJB-QL:

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

    我有两个问题:

    1. 我希望搜索不区分大小写(上面是区分大小写的),但我找不到类似的内容 lower() upper() 在EJBql中,我该怎么做才能有这种行为? 更新:我使用的是J2EE 1.4版和Glassfish 2.1版,如果这很重要的话。
    2. 我必须给这个方法传递一个丑陋的字符串,即 findByString("%john%") . 有没有一种方法可以写EJBql,这样我就可以传递 findByString("john") ?
    2 回复  |  直到 14 年前
        1
  •  1
  •   Jörn Horstmann    14 年前

    关于第二个问题,有一个 CONCAT 在ejb ql 2.1中的函数,因此我认为以下应该有效:

    其中(p.name如concat(“%”,concat(?)1,“%”)

    编辑: 上述方法不起作用,因为ql语法只允许在 LIKE 表达,这是非常有限的。应该可以通过使用 LOCATE 功能如下:

    WHERE LOCATE(p.name, ?1) <> 0
    
        2
  •  2
  •   Richard Kettelerij    14 年前

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

    我不知道您运行的是哪个容器,但jboss对ejb-ql(称为jboss ql)进行了一些扩展,并提供了 尤卡斯 功能。

    推荐文章