2019独角兽企业重金招聘Python工程师标准>>>

假设某 POJO 有属性如下:

private Set<User> users = new HashSet<>(0);@OneToMany(fetch = FetchType.LAZY, mappedBy = "xuser")public Set<User> getUsers() {return this.users;
}

如果我们使用jackson将其序列化,运行时会报错,myeclipse对宕机:

failed to lazily initialize a collection of role ...

解决方法一: 通过 Hibernate 的 OpenSessionInViewFilter 使得 FetchType 为 LAZY 的属性在序列化时为空,在 web.xml 中添加代码如下:

<filter>  <filter-name>openSession</filter-name>  <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>  <init-param>  <param-name>singleSession</param-name>  <param-value>false</param-value>  </init-param>
</filter>
<filter-mapping>  <filter-name>openSession</filter-name>  <url-pattern>/*</url-pattern>
</filter-mapping>

尽管 users 为空,但字段依然保留,对应输出:

{...,"users":[],...}

解决方法二:

在属性的 get 方法之前加上注解 @JsonIgnore,如此在转换为 JSON 时该字段被忽略:

import com.fasterxml.jackson.annotation.JsonIgnore;
…
private Set<User> users = new HashSet<>(0);
@JsonIgnore
@OneToMany(fetch = FetchType.LAZY, mappedBy = "xuser")public Set<User> getUsers() {return this.users;
}
…

注意引入的类是 com.fasterxml.jackson.annotation.JsonIgnore,如果使用 org.codehaus.jackson.annotate.JsonIgnore 则不能生效,见 Spring @JsonIgnore not working 。

解决方法三:

fetch = FetchType.LAZY 改为 fetch = FetchType.EAGER,但这样会导致每次查询数据库都要立即提取 OneToMany 的所有对象,所以非常不推荐。

转载于:https://my.oschina.net/whitejavadog/blog/877286

【Hibernate】Hibrenate POJO 类在序列化时遇到的问题相关推荐

  1. HSF/Dubbo序列化时的LocalDateTime, Instant的性能问题

    来源 在对Dubbo新版本做性能压测时,无意中发现对用例中某个TO(Transfer Object)类的一属性字段稍作修改,由Date变成LocalDateTime,结果是吞吐量由近5w变成了2w,R ...

  2. 简单介绍实体类或对象序列化时,忽略为空属性的操作

    这篇文章主要介绍了实体类或对象序列化时,忽略为空属性的操作,具有很好的参考价值,希望对大家有所帮助.如有错误或未考虑完全的地方,望不吝赐教 第一种,在配置文件配置 在application.xml直接 ...

  3. 实体类或对象序列化时,忽略为空属性

    第一种,在配置文件配置 在application.xml直接配置,这种方式是全局配置,所有返回给前端对象的属性为null或""都不进行序列化: spring: jackson:#实 ...

  4. java的(PO,VO,TO,BO,DAO,POJO)类名包名解释

    java的(PO,VO,TO,BO,DAO,POJO)解释 action包  顾名思义请求,主要是和view 即我们所说的视图就是页面打交道,action类 是 操作方法,对于页 面Form 表单的操 ...

  5. Hibernate学习之二-------搭建环境时应注意的地方

    1.使用的库的版本:Hibernate Core 3.2.4. Myeclipse 7.5中自带的.需要用到的jar包有: 不同的版本用到的包会不一样,也有可能出现包冲突的问题. 当使用Hiberna ...

  6. 关于类的序列化,下列说法哪些是正确的

    关于类的序列化,下列说法哪些是正确的:答案在文末 A. 类的序列化与serialVersionUID毫无关系. B. 如果完全不兼容升级,不需要修改serialVersionUID值. C. POJO ...

  7. POJO 类中布尔类型为啥不让用 isXxx 命名

    一.代码问题重现 想要使用json串在服务间传递信息时,我们会先定义一个POJO类,该类中包含是否删除属性isDeleted,代码如下 /** * @author wenxuan wang */ @D ...

  8. 项目中序列化时,去除属性为null的key

    项目中对象属性中的字段有很多时,每次查询需要的属性都不同,但是还是返回null,过滤掉为空的方法 1.@JsonIgnore标签 此注解用于方法或者属性上(最好就是用在属性上),作用就是在对象做序列化 ...

  9. [C#][Newtonsoft.Json] Newtonsoft.Json 序列化时的一些其它用法

    Newtonsoft.Json 序列化时的一些其它用法 在进行序列化时我们一般会选择使用匿名类型 new { },或者添加一个新类(包含想输出的所有字段).但不可避免的会出现以下情形:如属性值隐藏(敏 ...

最新文章

  1. cpp map 获取所有 key_Flutter 中最熟悉的陌生人之 Key 全面解析
  2. SaltStack实战之配置管理-Jinja2模板
  3. mac生成linux下可执行的.go二进制文件
  4. tensorflow tf.global_variables_initializer()(返回一个初始化全局变量的对象)
  5. 深度解读服务治理 ServiceMesh、xDS
  6. java8-02-Stream-API
  7. 去掉input、textarea 的边框
  8. statsmodels学习——使用多元回归拟合数据
  9. 斐波那契数列(剑指offer)
  10. C语言基础入门(经典收藏)
  11. 用java中的map解析微信MicroMsg里的CompatibleInfo.cfg和systemInfo.cfg
  12. 黑客防线、黑客X档案专辑 NPM、PYPI、DockerHub 备份
  13. STM32最小系统下载程序方法
  14. DDoS高防云服务器如何防御攻击
  15. 考研计算机专业课时长,计算机考研复习经验
  16. 模拟退火的一些个人见解
  17. SQL server不能修改表结构的解决办法
  18. 2019.04.20【NOIP提高组】模拟 B 组 观察题目+堆(?)+最大匹配+贪心、DP
  19. 15个微软Edge浏览器插件,你用过哪几个?
  20. java mina spring_Mina入门教程(二)----Spring4 集成Mina

热门文章

  1. netty:IO模型
  2. spring28: aspectJ--基于xml
  3. ORACLE TNS(transparence Network Substrate透明网络底层)
  4. Hexo+OSChina(码云)+git 搭建个人博客
  5. [20171109]缓存命中率神话.txt
  6. Android第二十期 - 微信的主体构架
  7. 《Zabbix安装部署-1》-Centos7
  8. tomcat和resin的安装配置
  9. Linux系统的CPU使用率和Load
  10. nagios中自己写的监控mysql主从复制的插件