2017-04-03 122 views
0

我目前对JPA 2和Typed Query有一些小问题。 我在我的项目中使用LIKE子句创建了一个搜索特性,但是当我尝试搜索像“marina”这样的字符串时它没有任何作用,它只在我输入“marin”时才起作用,即使在数据库中存在名称码头。JPA 2中的Like子句TypedQuery仅适用于某些名称参数,对于其他名称不适用

这是我的代码:

StringBuilder builder = new StringBuilder("select u from User u" 
       + " where (u.login LIKE :regex OR u.fullname LIKE :regex)" 
       + " AND (u.status <> :status)" 
       + " order by u.fullname"); 

     TypedQuery<User> query = jpaAPI.em().createQuery(builder.toString(),User.class); 
     query.setParameter("status", statusTypeDeleted()); 
     query.setParameter("regex", "%"+regex+"%"); 
     query.setFirstResult(init); 
     query.setMaxResults(end); 

因此,没有人知道问题出在哪里?

+2

我不知道它是否有帮助,但是您应该在查询字符串中使用%字符,而不是参数中,因为参数会被转义。 – dpassy

+2

只是一个评论,使用'StringBuilder'的要点是*不*连接像这样的字符串:'str1 + str2 + ...'。改用[append()](https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html#append(java.lang.CharSequence))方法。 – dic19

+0

,如果修复%does not work,然后查看日志中调用的SQL,并且它应该显示你的错误 –

回答

0

好的。我现在解决了这个问题。 的问题是在这条线:

query.setFirstResult(init); 

我给这个方法传递的值为1,而不是0如何只存在名为“码头”只有一个实体,查询结果什么都没有,因为第一个结果应该为0.

相关问题