JPA 2 TypedQuery 中的 Like 子句仅适用于某些名称参数,而其他则不适用
Like clause in JPA 2 TypedQuery works only for some name params and for others not
我目前在使用 JPA 2 和类型化查询时遇到一点问题。
我正在使用 LIKE 子句在我的项目中创建搜索功能,但是当我尝试搜索像 "marina" 这样的字符串时它不起作用,它仅在我键入 "marin" 时起作用,即使存在于数据库名称 marina.
这是我的代码:
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);
所以,有人知道问题出在哪里吗?
好的。我现在解决了这个问题。
问题出在这一行:
query.setFirstResult(init);
我传递给这个方法的值是 1 而不是 0。只存在一个名为 "marina" 的实体,查询结果什么都没有,因为第一个结果应该是 0。
我目前在使用 JPA 2 和类型化查询时遇到一点问题。 我正在使用 LIKE 子句在我的项目中创建搜索功能,但是当我尝试搜索像 "marina" 这样的字符串时它不起作用,它仅在我键入 "marin" 时起作用,即使存在于数据库名称 marina.
这是我的代码:
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);
所以,有人知道问题出在哪里吗?
好的。我现在解决了这个问题。 问题出在这一行:
query.setFirstResult(init);
我传递给这个方法的值是 1 而不是 0。只存在一个名为 "marina" 的实体,查询结果什么都没有,因为第一个结果应该是 0。