Hibernate 遇到的坑

灰太狼 2021-01-18 01:04 888阅读 0赞

在传统的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如下:
在这里插入图片描述
我当时理解的是懒加载序列化失败,查询了一番说是在原来实体类中加入以下注解

  1. @JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"})

然而并没有什么卵用,依旧报错。后来查询说加上懒加载配置,这个本来我就开启的,用Hibernate的人基本都在properties或者.yml中开启下面这个配置的吧

  1. spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true

这行代码是开启懒加载 防止no session

然而并没有解决问题,我就想是不是表关系的映射 然后就在实体类中查找原因,发现

  1. @JoinColumn

在这里插入图片描述

发现这个注解有问题,@JoinColumn用来指定与所操作实体或实体集合相关联的数据库表中的列字段,我立马发现我的DTO里面也set 实体类这个字段了,于是我立马注销然后 运行,艹真的可以了。罪魁祸首是实体类类字段被建立关系的时候无法被解析为Json,控制器一运行就立马销毁了,然后就是500的错误。解决是解决了但是我需要这个字段的数据,那我有该怎么办,我有3个办法第一种就是单独的查询出来,第二种就是获取上下文对象后传给一个新对象接受,这样就就可以提取内容了。 如下

  1. List<Article> objs = articles.getContent();
  2. for(Article obj:objs){
  3. List<comment> lists = obj.getCommentList();
  4. }

拿到单独的obj对象 然后在复制给一个新的对象进行接收。这样就解决了我的问题。

发表评论

表情:
评论列表 (有 0 条评论,888人围观)

还没有评论,来说两句吧...

相关阅读

    相关 hibernate catalog

    今天,领导让我把原来的项目改一份做成别的项目,当我改好spring连接数据库配置文件后,我说先试试能不能用,启动项目后,登录时一直从原来的数据库里查数据,我就不知道咋回事了。搞

    相关 Hibernate 那些

    昨天下午,同事在开发的过程中遇到一个奇怪的问题:在控制器方法中查询出了一个对象,然后把这个对象传递到 service 层中,修改这个对象最后保存,但保存之后在数据库中相应的记录

    相关 Xposed遇到

    如果某个APP的dex有多个在安卓5,0以上ART会合成一个oat文件。那么5.0以下会存在多个dex。 所以在5.0以下hook一个某个方法,而这个方法不在主dex,而存

    相关 Hibernate 遇到

    传统的java开发中,通常分领域模型,model。在对数据进行保存的时候通常一般会保存到vo中,显示数据到页面的时候通常是dto,前几天遇到个坑,在dto中封装实体对象,...