Hibernate类没有找到序列化器解决方案

Posted 涛先森の日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate类没有找到序列化器解决方案相关的知识,希望对你有一定的参考价值。

Hibernate类没有找到序列化器解决方案

异常信息类似如下

No serializer found for class 
org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no 
properties discovered to create BeanSerializer (to avoid exception, 
disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through 
reference chain: com.alibaba.fastjson.JSONObject["data"]-
>cn.zytao.taosir.auth.entity.Role_$$_jvst21b_0["handler"])

有道翻译如下

没有为org.hibernate.proxy.pojo.javassist类找到序列化器。没有发现创建
BeanSerializer的属性(为了避免异常,请禁用
SerializationFeature.FAIL_ON_EMPTY_BEANS)(通过引用
链:com.alibaba.fastjson.JSONObject["data"]->cn. 
zytao.taosir.au.entity.role_ $$_jvst21b_0["handler"])

总之,没有为org.hibernate.proxy.pojo.javassist类找到序列化器。

原因:

hibernate会给被管理的pojo加入一个hibernateLazyInitializer属性,

然而我们在转json的时候,这个属性是不允许反射的,所以抛出了异常

我们可以去配置文件中添加一个配置

properties

spring.jackson.serialization.fail-on-empty-beans=false

yml/yaml

spring:
  jackson:
    serialization:
      fail-on-empty-beans: false

这样就可以转换了

但是,hibernateLazyInitializer handler 两个也被作为参数转换成json

我们可以在实体类的声明上添加注解来解决,例如

@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler"})  
public class Role implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 角色代码
     */
    @Id
    private String roleCode;
}

@JsonIgnoreProperties可以使得在转换的时候忽略掉这些属性

以上是关于Hibernate类没有找到序列化器解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Android Parcelable反序列化报错笔记:java.lang.RuntimeException: Unmarshalling unknown type code at offset(代码片

分享知识-快乐自己:初识 Hibernate 概念片

3小时找hibernate反向生成类为什么没有生成外键

使用JBoss AS 7连接到DB2 db的JPA-Hibernate:HHH000183:没有为查询类找到持久化类

DRF框架serializer之ModelSerializer

解决报错:在Python中使用property装饰器时,出现错误:TypeError: descriptor ‘setter‘ requires a ‘property‘ object but(代码片