为什么本机查询在接下来的第二个查询中不起作用?

Why native query is not working in following second query?

在这两种方法之间,第一种方法是用JPQL写下来的,第二种方法是在native query中。

 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);

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

您根本不必转义 :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

其中 returns 个 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