最近为了加深学习spring和hibernate,就利用spring4、hibernate5搭建了springmvc与hibernate整合的平台框架。搭建过程曾遇到了一系列的棘手问题,在这里将相应的解决方案给予记录和分享。
利用jackson序列化hibernate一对多关联对象时,出现死循环。花费了1天半时间,必须记录下来。
很显然是由于jackson序列化的深度序列化引起的。hibernate的级联对象难免会存在各式各样的循环嵌套,更甚至自关联的情况。解决的思路有两种:第一种,生成对象识别码,避免对象被重复序列;第二种,避免深度序列化
这里可以使用jackson 2.0+版本新注解——@jsonidentityinfo,作用于类或属性上,被用来在序列化/反序列化时为该对象或字段添加一个对象识别码,通常是用来解决循环嵌套的问题。弊端——对延迟加载的对象不起作用。使用示例如下:
注意这里特指“深度”俩字,利用@jsonignore注解显然是不能满足的。通过翻阅jackson 2.0+ api文档,发现了@jsonignoreproperties注解现在能用在属性上了,效果就是子对象中不再包含过滤掉的的属性,而对象本身则依然包含。经测试,延迟加载也不成问题,推荐使用。使用示例如下:
best wishes for you!