1
beetlerx 2022-09-01 10:45:53 +08:00 1
直接用 String 接收 然后反序列化也行啊
|
2
muchenlou OP @beetlerx 用 String 接受的话,会提示 [No Dialect mapping for JDBC type: 1111]
|
3
lix7 2022-09-01 10:51:56 +08:00 1
写个自定义 converter
|
5
optional 2022-09-01 11:02:17 +08:00 via iPhone 1
拿 JsonNode 接
|
6
shanai 2022-09-01 11:03:29 +08:00 1
https://mvnrepository.com/artifact/com.vladmihalcea/hibernate-types-52
可以看一下这个的实现应该能解决你的问题 |
9
nothingistrue 2022-09-01 11:11:28 +08:00 1
Spring JPA 的实现 Hibernate ,没有为 PostgreSQL JSON 类型提供基本类型映射,所以这个你只能自定义 BasicType 或者 Converter 。
|
10
nothingistrue 2022-09-01 11:13:00 +08:00 1
你可以将 JSON 类型映射到 Jackson 的 JsonNode ,然后用 Jackson 的 API 或者 JsonPath 来读写这个 JsonNode
|
11
HHHorz 2022-09-01 11:36:48 +08:00 1
封装一个 typeHandler 类
java 实体类 @TableField(typeHandler = JsonbTypeHandler.class) 通过拦截的方法拦截转换字段 在 Mapper.xml 文件中声明 typeHandler set data = #{data,jdbcType=OTHER,typeHandler=com.datasync.entity.handler.JsonbTypeHandler} |
13
zed1018 2022-09-01 12:39:28 +08:00
存储过程我不知道,但是 entity 的话可以用 Map<String,Any>或者 JsonNode ,然后配合 @Convert(converter=)做一个自定义的序列化和反序列化
|
14
xiaohusky 2022-09-01 14:56:36 +08:00
群友这是
|
15
facelezz 2022-09-01 16:04:55 +08:00
谷歌搜索 mybatis typeHandler
|
16
nothingistrue 2022-09-01 17:27:03 +08:00
|
17
nothingistrue 2022-09-01 17:57:20 +08:00 2
@muchenlou 我再看了以下,这个不只是类型映射的问题。PostgreSQL JSON 类型是非普遍的 SQL 类型,它连 JDBC type 都是自定义的 1111 ,这种情况 JPA 短时间(可能 10 年)内是不会考虑对它的支持的。这里就算你用 CUstom Basic Type 或者 Converter 解决了实体映射,在映射后的实体上也只能把它当成 Object/String 来用,最多当成只读的 JsonNode 。像部分修改 json 的值,通过 json 的特定属性来查询这些功能,都是用不了的。上面这些功能你必须要用脱离 JPA 标准的 NativeSql 来做。
我得建议是,不要再考虑映射 JSON 类型了。增加一个 varchar 或 clob 类型的列,映射到实体类的 String 类型上,额外限定该字段(对于实体类的上层应用来说)是只读的。原有的 JSON 类型的列,对实体类不可见,只能通过自定义 Repository 并使用 Native SQL 来访问,且自定义 Repository 需要负责这两个列的值的同步。当然如果你不需要 JSON 类型列的特定功能的话,你就直接 String 映射 varchar 或 clob 类型的列 即可,上层程序中自行处理 JSON 即可。 |
18
optional 2022-09-02 07:57:13 +08:00
|
19
nothingistrue 2022-09-02 09:23:40 +08:00
@optional 首先这是个好东西,楼主可以考虑直接用了。
然后还是要做下名词解释: JPA 是 Java 实体持久化标准; Hibernate 是 JPA 的一种实现库,类似的实现还有 EclipseLink 等等; (背后的话,JPA 3.0 标准是基于 Hibernate 提取的,但这不影响 JPA 是独立标准;) Spring Data JPA 是一个再次封装、更容易直接使用的库,它理论上是再封装 JPA ,但实际上是再封装 Hibernate ; vladmihalcea/hibernate-types 这个,算是 Hibernate 核心的第三方扩展; |
20
HHHorz 2022-10-09 10:42:12 +08:00
|