【Hibernate】Hibrenate POJO 类在序列化时遇到的问题
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 类在序列化时遇到的问题相关推荐
- HSF/Dubbo序列化时的LocalDateTime, Instant的性能问题
来源 在对Dubbo新版本做性能压测时,无意中发现对用例中某个TO(Transfer Object)类的一属性字段稍作修改,由Date变成LocalDateTime,结果是吞吐量由近5w变成了2w,R ...
- 简单介绍实体类或对象序列化时,忽略为空属性的操作
这篇文章主要介绍了实体类或对象序列化时,忽略为空属性的操作,具有很好的参考价值,希望对大家有所帮助.如有错误或未考虑完全的地方,望不吝赐教 第一种,在配置文件配置 在application.xml直接 ...
- 实体类或对象序列化时,忽略为空属性
第一种,在配置文件配置 在application.xml直接配置,这种方式是全局配置,所有返回给前端对象的属性为null或""都不进行序列化: spring: jackson:#实 ...
- java的(PO,VO,TO,BO,DAO,POJO)类名包名解释
java的(PO,VO,TO,BO,DAO,POJO)解释 action包 顾名思义请求,主要是和view 即我们所说的视图就是页面打交道,action类 是 操作方法,对于页 面Form 表单的操 ...
- Hibernate学习之二-------搭建环境时应注意的地方
1.使用的库的版本:Hibernate Core 3.2.4. Myeclipse 7.5中自带的.需要用到的jar包有: 不同的版本用到的包会不一样,也有可能出现包冲突的问题. 当使用Hiberna ...
- 关于类的序列化,下列说法哪些是正确的
关于类的序列化,下列说法哪些是正确的:答案在文末 A. 类的序列化与serialVersionUID毫无关系. B. 如果完全不兼容升级,不需要修改serialVersionUID值. C. POJO ...
- POJO 类中布尔类型为啥不让用 isXxx 命名
一.代码问题重现 想要使用json串在服务间传递信息时,我们会先定义一个POJO类,该类中包含是否删除属性isDeleted,代码如下 /** * @author wenxuan wang */ @D ...
- 项目中序列化时,去除属性为null的key
项目中对象属性中的字段有很多时,每次查询需要的属性都不同,但是还是返回null,过滤掉为空的方法 1.@JsonIgnore标签 此注解用于方法或者属性上(最好就是用在属性上),作用就是在对象做序列化 ...
- [C#][Newtonsoft.Json] Newtonsoft.Json 序列化时的一些其它用法
Newtonsoft.Json 序列化时的一些其它用法 在进行序列化时我们一般会选择使用匿名类型 new { },或者添加一个新类(包含想输出的所有字段).但不可避免的会出现以下情形:如属性值隐藏(敏 ...
最新文章
- cpp map 获取所有 key_Flutter 中最熟悉的陌生人之 Key 全面解析
- SaltStack实战之配置管理-Jinja2模板
- mac生成linux下可执行的.go二进制文件
- tensorflow tf.global_variables_initializer()(返回一个初始化全局变量的对象)
- 深度解读服务治理 ServiceMesh、xDS
- java8-02-Stream-API
- 去掉input、textarea 的边框
- statsmodels学习——使用多元回归拟合数据
- 斐波那契数列(剑指offer)
- C语言基础入门(经典收藏)
- 用java中的map解析微信MicroMsg里的CompatibleInfo.cfg和systemInfo.cfg
- 黑客防线、黑客X档案专辑 NPM、PYPI、DockerHub 备份
- STM32最小系统下载程序方法
- DDoS高防云服务器如何防御攻击
- 考研计算机专业课时长,计算机考研复习经验
- 模拟退火的一些个人见解
- SQL server不能修改表结构的解决办法
- 2019.04.20【NOIP提高组】模拟 B 组 观察题目+堆(?)+最大匹配+贪心、DP
- 15个微软Edge浏览器插件,你用过哪几个?
- java mina spring_Mina入门教程(二)----Spring4 集成Mina