2011-05-09 97 views
0

在我的ejb-jar.xml中SQL中的LIKE工作不正确?

 <query> 
      <query-method> 
       <method-name>findByCaName</method-name> 
       <method-params> 
        <method-param>java.lang.String</method-param> 
       </method-params> 
      </query-method> 
      <ejb-ql>SELECT OBJECT(c) FROM Categories AS c WHERE c.caName LIKE ?1</ejb-ql> 
     </query> 

当我搜索,为例子,“行动”,结果是正确的,但是当我试图寻找“ACTI”,它返回一个空的集合,任何人可以告诉我哪里错了?
谢谢

+0

您需要'LIKE“Acti%”'来搜索以“Acti”开头的文本。 – 2011-05-09 13:53:41

回答

3

通常你必须指定你喜欢的字符串通配符,如 “ACTI%” 或 “%CTI%”

+0

但因为我使用参数,因此我不知道如何做这样的 – Xitrum 2011-05-09 13:52:51

+0

您是否尝试将'%'添加到您的参数? – 2011-05-09 13:53:52

+0

是的,但它会导致“部署失败”,当我尝试部署我的应用程序,它不接受'%' – Xitrum 2011-05-09 13:55:15

1

如何追加%到您的参数:

CONCAT(?1, '%') 
+0

调用它,但它没有运行:( – Xitrum 2011-05-09 14:19:34

0

让您的参数为一个字符串,然后附加'%' or '_'作为前缀或后缀。 '_'表示单个字符变体,'%'表示多个字符变体。

但最酷的方法是让用户[在搜索功能]输入%或_ in,然后将其传递给查询。这给了巨大的优势和灵活性。