![]() |
1
beetlerx 204 天前 ![]() 直接用 String 接收 然后反序列化也行啊
|
![]() |
3
lix7 204 天前 ![]() 写个自定义 converter
|
5
optional 204 天前 via iPhone ![]() 拿 JsonNode 接
|
6
shanai 204 天前 ![]() https://mvnrepository.com/artifact/com.vladmihalcea/hibernate-types-52
可以看一下这个的实现应该能解决你的问题 |
9
nothingistrue 204 天前 ![]() Spring JPA 的实现 Hibernate ,没有为 PostgreSQL JSON 类型提供基本类型映射,所以这个你只能自定义 BasicType 或者 Converter 。
|
10
nothingistrue 204 天前 ![]() 你可以将 JSON 类型映射到 Jackson 的 JsonNode ,然后用 Jackson 的 API 或者 JsonPath 来读写这个 JsonNode
|
![]() |
11
HHHorz 204 天前 ![]() 封装一个 typeHandler 类
java 实体类 @TableField(typeHandler = JsonbTypeHandler.class) 通过拦截的方法拦截转换字段 在 Mapper.xml 文件中声明 typeHandler set data = #{data,jdbcType=OTHER,typeHandler=com.datasync.entity.handler.JsonbTypeHandler} |
13
zed1018 204 天前
存储过程我不知道,但是 entity 的话可以用 Map<String,Any>或者 JsonNode ,然后配合 @Convert(converter=)做一个自定义的序列化和反序列化
|
14
xiaohusky 204 天前
群友这是
|
15
facelezz 204 天前
谷歌搜索 mybatis typeHandler
|
16
nothingistrue 204 天前
|
17
nothingistrue 204 天前 ![]() @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 203 天前
|
19
nothingistrue 203 天前
@optional 首先这是个好东西,楼主可以考虑直接用了。
然后还是要做下名词解释: JPA 是 Java 实体持久化标准; Hibernate 是 JPA 的一种实现库,类似的实现还有 EclipseLink 等等; (背后的话,JPA 3.0 标准是基于 Hibernate 提取的,但这不影响 JPA 是独立标准;) Spring Data JPA 是一个再次封装、更容易直接使用的库,它理论上是再封装 JPA ,但实际上是再封装 Hibernate ; vladmihalcea/hibernate-types 这个,算是 Hibernate 核心的第三方扩展; |
![]() |
20
HHHorz 166 天前
|