【问题标题】:Why native query is not working in following second query?为什么本机查询在以下第二个查询中不起作用?
【发布时间】:2021-12-24 19:47:08
【问题描述】:

在这两种方法之间,第一种方法是用 JPQL 写下来的,第二种方法是原生查询。

 1.   @Query("select e from Meeting  e where e.meetingName like %:query%" )
    List<Meeting> findByJPQL(@Param("query") String query);

 2.  @Query( nativeQuery = true, value ="select * from meeting as m where m.meeting_name like '%':query'%'" )
    List<Meeting> findByNativeQuery(@Param("query") String query);

第一个给出了正确的值,但第二个没有,谁能告诉我们第二个查询有什么问题?

【问题讨论】:

  • 因为你正在逃避 %。
  • 你能给我举个例子吗?

标签: spring spring-data-jpa spring-data


【解决方案1】:

您根本不必转义:query 参数。这是文档中记录的一种: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.at-query.advanced-like

@Query(nativeQuery = true, value ="select * from meeting as m where m.meeting_name like %:query%" )
List<Meeting> findByNativeQuery(@Param("query") String query);

本机查询的参数绑定使用用于绑定 JPQL 查询的类似代码。

https://github.com/spring-projects/spring-data-jpa/blob/dccc58040b2eb59f1ed425df491e6de87b130897/src/main/java/org/springframework/data/jpa/repository/query/StringQuery.java#L232

从以下位置返回static class LikeParameterBinding extends ParameterBinding

https://github.com/spring-projects/spring-data-jpa/blob/main/src/main/java/org/springframework/data/jpa/repository/query/StringQuery.java#L288

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多