2

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

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

我有两个问题:

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

2 回答 2

2

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

我不知道您在哪个容器中运行,但 JBoss 对 EJB-QL(称为 JBossQL)进行了一些扩展,并具有UCASE功能。

于 2010-08-04T11:43:15.170 回答
1

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

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

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

WHERE LOCATE(p.name, ?1) <> 0
于 2010-08-04T12:01:19.243 回答