【问题标题】:SQLGrammar Exception in integration tests on H2 DatabaseH2 数据库集成测试中的 SQLGrammar 异常
【发布时间】:2021-05-15 04:13:26
【问题描述】:
@Query(nativeQuery = true, value = "SELECT *\n" +
        "FROM TDED_VISITS v \n" +
        "WHERE v.v_collected_data.assigneeId = ?")
List<Visit> findAllByAssigneeId(String assigneeId);

以上代码用于存储库中,查询的目的是返回所有与提供的值具有匹配值的“访问”。此值是 Oracle 数据库中 CLOB 中 JSON 对象内部的单个值,如下所示。

{"visitId" : 1, "assigneeId" : "agr512"}

模型是用下面的关联字段制作的。

@Column(name = "V_COLLECTED_DATA")
@Lob
private String visitJsonString;

日志中的错误如下

Column "V.V_COLLECTED_DATA.ASSIGNEEID" not found; SQL statement:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [SELECT *
FROM TDED_VISITS v 
WHERE v.v_collected_data.assigneeId = ?]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement

也尝试了下面的 SQL 查询,但给出了找不到函数 JSON_VALUE 的错误。

@Query(nativeQuery = true, value = "SELECT *\n" +
        "FROM TDED_VISITS v \n" +
        "WHERE JSON_VALUE(V_COLLECTED_DATA, '$.assigneeId') = ?")

Caused by: org.springframework.orm.jpa.JpaSystemException: could not prepare statement; nested exception is org.hibernate.exception.GenericJDBCException: could not prepare statement

花了几天时间为其他人寻找类似的问题,但无济于事。如果有人可以提供帮助,谢谢!

【问题讨论】:

    标签: oracle spring-boot hibernate integration-testing h2


    【解决方案1】:

    H2 不支持访问 JSON 属性。有关支持的功能列表,请参见此处:https://www.h2database.com/html/functions.html

    【讨论】:

    • 感谢您的信息!看起来我想做的事情是不可能的。
    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 2021-05-08
    • 2012-12-12
    • 2022-01-02
    • 1970-01-01
    • 2010-09-08
    • 2012-03-20
    • 1970-01-01
    相关资源
    最近更新 更多