【问题标题】:@Query annotation using like %?1%使用类似 %?1% 的 @Query 注释
【发布时间】:2014-06-13 03:31:22
【问题描述】:

我想写一个这样的查询

@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,

我尝试将 % 替换为 '%' 或像这样连接查询字符串:"select ... like '%'" + "?1" + "'%'" 但没有成功,请帮助我

【问题讨论】:

  • 您使用的是哪个版本的 Spring Data JPA?

标签: hibernate jpa hql spring-data


【解决方案1】:

如果您使用的是 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 注释中使用 %,而是需要将其添加到参数本身中

【讨论】:

  • 这对 sql 注入安全吗?
【解决方案2】:

如下使用CONCAT:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 2018-10-31
    相关资源
    最近更新 更多