在 Spring Boot 中使用 ':' 作为查询字符串的一部分编写 JPQL 查询
Posted
技术标签:
【中文标题】在 Spring Boot 中使用 \':\' 作为查询字符串的一部分编写 JPQL 查询【英文标题】:Writing JPQL query in Spring boot with ':' as a part of the query string在 Spring Boot 中使用 ':' 作为查询字符串的一部分编写 JPQL 查询 【发布时间】:2018-09-18 02:10:02 【问题描述】:我必须在 Spring Boot 中编写一个 JPQL 查询,相当于下面的查询。
查询:
SELECT * FROM flow.logs where feature_id like '%|data:6789%';
我提出的 JPQL 查询:
@Query("SELECT logs FROM Logs logs WHERE logs.featureId like '%|data\\: :data%'")
public List<Logs> getLogsByStationId(@Param("data")Integer data);
查询不起作用并给出以下异常:
Unknown parameter position: 1; nested exception is
java.lang.IllegalArgumentException: Unknown parameter position: 1
谁能告诉我我的代码有什么问题。
【问题讨论】:
你也可以使用@Query(value="normal sql query",nativeQuery=true) 来避免这种情况 @Frank:这行不通。 你用的是spring data jpa吗?如果你是,看看这个docs.spring.io/spring-data/jpa/docs/current/reference/html/… 尝试以下操作:@Query("SELECT logs FROM Logs logs WHERE logs.featureId like '%|data\\: ?1%'") public List<Logs> getLogsByStationId(Integer data);
您可以使用spring JPA存储库的命名约定摆脱@Query
:public List<Logs> getLogsByStationIdContaining(Integer data);
【参考方案1】:
您可以像这样使用 CONCAT 函数:
@Query("SELECT logs FROM Logs logs WHERE "
+ "logs.featureId like CONCAT('%|data:', :data, '%')")
【讨论】:
以上是关于在 Spring Boot 中使用 ':' 作为查询字符串的一部分编写 JPQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增删改查示例
spring boot redis(连接,增删改查,集群,和session一起使用)
Spring Boot(十五):spring boot+jpa+thymeleaf增删改查示例