@Query注释使用类似%?1%

时间:2014-04-27 17:32:36

标签: hibernate jpa hql spring-data

我想写一个像这样的查询

@Query("select p from Product p where p.name = ?1 or p.desc like %?1%")

但它给了我例外

org.hibernate.hql.ast.QuerySyntaxException: unexpected token: % near line 1,

我尝试将%替换为'%'或连接查询字符串,如下所示:"选择...喜欢'%'" +"?1" +"'%'"但没有运气,请帮帮我

3 个答案:

答案 0 :(得分:4)

如果您使用的是Spring Data JPA 1.3.1或更高版本,则需要执行以下操作:

@Query("select p from Product p where p.name = :name or p.desc like %:name%")
public List<Product> searchByName(@Param("name") String name);

查看this博文,了解更多详情

在Spring Data JPA 1.3.1之前,您无法在@Query注释中使用%,而是需要在参数本身中添加它

答案 1 :(得分:0)

使用CONCAT如下:

@Query("select p from Product p where p.name = ?1 or p.desc like CONCAT('%',?1,'%') ")

答案 2 :(得分:-1)

使用:。你可以使用标识符。

@Query("select p from Product p where p.name = :productName or p.desc like :productDescription")

然后

query.setParameter("productName", theName);

查看JPQL规范,了解JPQL和SQL之间的区别。

更新:对于LIKE运算符,%放在值中,而不是放在JPQL中。

query.setParameter("productDescription", "%" + partialDescription + "%");