如何解决java 8 到 java 11 迁移后,使用 postgres db 和 Spring Boot 保存 jsonb 类型数据时出现 JpaSystemException
我正在尝试使用以下库将 jsonb 类型数据保存到 Postgres db 表
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.14</version>
</dependency>
在 java 8 中它没有任何问题,但由于要求,我不得不将服务迁移到 java 11,但是在迁移后,当我尝试将 jsonb 保存到表中时,出现以下错误。
org.springframework.orm.jpa.JpaSystemException: java.lang.IllegalArgumentException: 给定的字节数组无法转换为 Json 对象;嵌套异常为 org.hibernate.HibernateException: java.lang.IllegalArgumentException: 给定的字节数组无法转换为 Json 对象。
注意 - Java 8 和 Java 11 中的 Hibernate 版本相同 版本:5.4.20.Final 两个版本
以下是试图保存的实体
@Builder(toBuilder = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "test")
@TypeDefs({
@TypeDef(name = "jsonb",typeClass = JsonBinaryType.class),})
public class Test extends Auditable {
@Id
@Column(name = "id",updatable = false,nullable = false,unique = true)
private UUID id;
@Type(type = "jsonb")
@Column(name = "data",columnDeFinition = "jsonb")
private RequestEventDto data;
}
以下是RequestEventDto
import lombok.Builder;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
@Builder
public class RequestEventDto {
private String requestId;
@Builder.Default
private String applicationId = "program1";
private String entityType;
private List<Map<String,Object>> listEntities;
}
你能帮忙解决这个问题吗?
解决方法
通过向 RequestEventDto 添加以下注释解决了问题
@NoArgsConstructor
@AllArgsConstructor
public class RequestEventDto {
似乎是因为序列化发生时构造函数不在那里。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。