Hibernate 遇到的坑
在传统的java开发中,通常分领域模型,model。在对数据进行保存的时候通常一般会保存到vo中,显示数据到页面的时候通常是dto,前几天遇到个坑,在dto中封装实体对象,到控制器调用service进行相关业务操作的时候报错500,错误如下
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No
serializer found for class
org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no
properties discovered to create BeanSerializer (to avoid exception,
disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference
我的DTO如下:
我当时理解的是懒加载序列化失败,查询了一番说是在原来实体类中加入以**解
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"})
然而并没有什么卵用,依旧报错。后来查询说加上懒加载配置,这个本来我就开启的,用Hibernate的人基本都在properties或者.yml中开启下面这个配置的吧
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
这行代码是开启懒加载 防止no session
然而并没有解决问题,我就想是不是表关系的映射 然后就在实体类中查找原因,发现
@JoinColumn
发现这个注解有问题,@JoinColumn
用来指定与所操作实体或实体集合相关联的数据库表中的列字段,我立马发现我的DTO里面也set 实体类这个字段了,于是我立马注销然后 运行,艹真的可以了。罪魁祸首是实体类类字段被建立关系的时候无法被解析为Json,控制器一运行就立马销毁了,然后就是500的错误。解决是解决了但是我需要这个字段的数据,那我有该怎么办,我有3个办法第一种就是单独的查询出来,第二种就是获取上下文对象后传给一个新对象接受,这样就就可以提取内容了。 如下
List<Article> objs = articles.getContent();
for(Article obj:objs){
List<comment> lists = obj.getCommentList();
}
拿到单独的obj对象 然后在复制给一个新的对象进行接收。这样就解决了我的问题。
上一篇: 简单jquery下拉菜单流畅版
下一篇: leetcode第141题链表有无环
推荐阅读
-
企业转型互联网会遇到哪些坑(平台篇)
-
Hibernate使用中防止SQL注入的几种方案
-
JSP开发中hibernate框架的常用检索方式总结
-
Windows下安装MySQL 5.7.17压缩版中遇到的坑
-
Centos7安装docker compse踩过的坑及解决方法
-
Vue中用props给data赋初始值遇到的问题解决
-
vue填坑之webpack run build 静态资源找不到的解决方法
-
解析JS在获取当前月的最后一天遇到的坑
-
linux下tar命令遇到error:"Error exit delayed from previous errors"的问题及解决
-
使用360安全浏览器遇到浏览器崩溃情况的解决方法