Jpa 将长字符串与字符串进行比较

Jpa 将长字符串与字符串进行比较,jpa,jpql,jpa-2.1,Jpa,Jpql,Jpa 2.1,在JPQL中的where条件下,我要执行以下操作: book.id like lower(:search) 问题是:book.id是一个Long,但是:search参数是一个字符串。上面的方法是否正确,或者我是否需要显式地将book.id转换为String,如果是这种情况,我该怎么做?我会将:search参数转换为Long,并将查询条件更改为: book.id = :search 然后 List books=em.createQuery(“…WHERE book.id=:search”)

在JPQL中的where条件下,我要执行以下操作:

book.id like lower(:search)

问题是:
book.id
是一个
Long
,但是
:search
参数是一个字符串。上面的方法是否正确,或者我是否需要显式地将
book.id
转换为
String
,如果是这种情况,我该怎么做?

我会将
:search
参数转换为
Long
,并将查询条件更改为:

book.id = :search
然后

List books=em.createQuery(“…WHERE book.id=:search”)
.setParameter(“搜索”,Long.valueOf(strSearch))
.getResultList();

一般来说,处理数字比处理字符串快。

您可以在JPQL中使用CAST语句,如:

CAST(book.id AS string) LIKE lower(:search)

但是,使用此解决方案,您将无法在book.id列上使用任何索引。

这不起作用,因为在我的例子中,
:search
参数不仅用于与
id
进行比较,还用于与标题进行比较(用户可以搜索id或title)。嗯,这种情况不是最初问题的一部分;)。如果需要将
:搜索
与标题字符串进行比较,则
LIKE
是正确的选择。无论如何,使用完整的查询定义(甚至伪代码)更新问题将有助于更好地理解问题背后的思想。
CAST(book.id AS string) LIKE lower(:search)