在 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 isjava.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&lt;Logs&gt; getLogsByStationId(Integer data); 您可以使用spring JPA存储库的命名约定摆脱@Querypublic List&lt;Logs&gt; 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增删改查示例

136. [视频]Spring Boot MyBatis升级篇-注解-增删改查

springboot数据库交互,字段不确定怎么查

spring boot(十五)spring boot+thymeleaf+jpa增删改查示例