jackson 反序列化 jpa实体报错

笨笨的阿星 发布于 06/29 21:02
阅读 162
收藏 0

精选30+云产品,助力企业轻松上云!>>>

实体

异常信息

异常代码位置

redis配置

在网上找了很久没有解决办法

加载中
0
Kit_lee
Kit_lee

检查一下是不是双向引用引起的问题,即父POJO类引用发子POJO类,子POJO类里边又引用了父POJO类。没使用@JsonIgnore

Kit_lee
Kit_lee
回复 @笨笨的阿星 : 我估计是这样,序列化在redis中的对象,其中permissions属性其实是hirbernate的一个代理类,并不是java.util.Set。所以在反序列化时才会找hibernate干活。我推荐你试试@JsonTypeInfo指定一下序列化时目标类看看
笨笨的阿星
我感觉是pojo查询出来的时候,把数据序列化保存的redis,当前查询就关闭了,等从redis获取到数据进行反序列化,因为是jpa实体关联字段会去查询数据库,但是连接已经关闭所以报的这个错误。在反序列化的时候如何不进行查询操作
0
f
freezingsky

lazy的时候 ,序列化时,触发lazy的加载 ,但是session 关闭了,所以,失败了。 
一般JPA的实体,不要直接往外扔。如果你非要,请打开openInView,不过,建议不要!

0
SpringBoot中文社区
SpringBoot中文社区

你这个原因应该是,jpa检索出来的对象是一个懒加载的“代理对象”,jackson在序列化的时候,调用了getter方法,代理对象发现getter为null,于是就会去数据库检索关联记录。但是执行环境不在事务里面。当前线程没有绑定SESSION,导致了这个异常。

你可以考虑把这个几行代码,封装到一个事务方法里面去执行。

返回顶部
顶部