首页 > 解决方案 > 带有类似语句的 Spring Data 和本机查询

问题描述

我有以下存储库定义:

public interface InstructionRepository extends JpaRepositoryWithSpecification<Instruction> {

    String FIND_INSTRUCTIONS_BY_TRACKING_ID_QUERY =
            "SELECT * FROM instruction i WHERE i.invoice_documents_trackings like '%:trackingId%'";

    @Query(value = FIND_INSTRUCTIONS_BY_TRACKING_ID_QUERY, nativeQuery = true)
    List<Instruction> findByFileTrackingsContaining(@Param("trackingId") String trackingId);
}

我在这里使用原生查询的原因是因为invoice_documents_trackingscolumn 代表了一个序列化为 json 字符串的映射。所以基本上我想找到所有特定trackingId存储在invoice_documents_trackings地图中的指令。

当我执行该方法时,我总是得到 0 结果,尽管如果我手动执行相同的查询,我会得到预期的结果。

我还尝试更改查询,使其看起来像:

String FIND_INSTRUCTIONS_BY_TRACKING_ID_QUERY =
        "SELECT * FROM instruction i WHERE i.invoice_documents_trackings like %:trackingId%"

这也不起作用。

真的很感激任何帮助,而不是

标签: javaspringspring-data-jpaspring-data

解决方案


我认为问题在于您使用的方式%

String FIND_INSTRUCTIONS_BY_TRACKING_ID_QUERY =
        "SELECT * FROM instruction i WHERE i.invoice_documents_trackings like CONCAT('%', :trackingId, '%')"

推荐阅读