升级 hibernate-core 依赖版本后使用 Hibernate 实体管理器执行插入时出现问题

问题描述 投票:0回答:1

直到以下版本的 hibernate-core
实现 'org.hibernate.orm:hibernate-core:6.6.0.Alpha1'

可以成功执行以下代码:

INSERT INTO example_table (geom) 
VALUES (
    ST_SetSRID(
        ST_GeomFromGeoJSON(
            $dollar${"type":"Point","coordinates":[-34.4214,-15.9216]}$dollar$
        ),
        4326
    )
)
ON CONFLICT DO NOTHING;

哪个休眠会运行以下语句:

INSERT INTO example_table (geom) 
VALUES (
    ST_SetSRID(
        ST_GeomFromGeoJSON(
            $dollar${"type":"Point","coordinates":[-34.4214,-15.9216]}$dollar$
        ),
        4326
    )
)
ON CONFLICT DO NOTHING;;

但是将该依赖关系升级为:
实现 'org.hibernate.orm:hibernate-core:6.6.0.CR1' 或以上,相同的查询将导致 hibernate 尝试执行以下语句:

INSERT INTO example_table (geom) 
VALUES (
    ST_SetSRID(
        ST_GeomFromGeoJSON(
            $dollar$""""""{type:Point,coordinates:[-34.4214,-15.9216]}$dollar$
        ),
        4326
    )
)
ON CONFLICT DO NOTHING;;

这会导致以下异常:[错误:未知的 GeoJSON 类型] [n/a]。

这些查询是使用 EntityManager.createNativeQuery(query) 运行的。

有谁知道为什么会发生这种情况(查询中存在多个双引号)?我在发行说明中找不到任何有关它的信息。我发现解决这个问题的唯一方法是去掉美元报价并用单引号包围 json,这不是我想要做的。

6.6.0.CR1 以上的每个版本都会发生这种情况,包括 spring boot 3.4.x 中 spring data jpa 使用的版本。

编辑。 1

我需要使用本机查询进行具有更新插入行为的批量插入。 Hibernate/JPA 不支持诸如 ON CONFLICT DO NOTHING 之类的操作。

spring-boot hibernate jdbc spring-data-jpa
1个回答
0
投票

由于空间扩展或配置更改的兼容性问题,插入 Hibernate EntityManager 和空间数据可能会在升级依赖版本后出现问题。检查您的方言或配置设置是否已更新,并且 Hibernate Spatial 是否包含在正确的版本中。

© www.soinside.com 2019 - 2024. All rights reserved.