日期:2014-05-16  浏览次数:20267 次

json的持久化与hibernate的延迟加载之间的冲突
1.hibernate的session已关闭问题:
是因为hibernate延迟加载导致的,解决办法:
a.使用spring提供的opensessioninview功能,在web.xml中做相应的配置;注意在执行sql语句时一定要用spring封装的API,如getHibernateTemplate().find()。
b.在相应的bean映射文件中配置layz=false。
c.在dao中使用Hibernate.initialize()方法。
2.用json时出现数据定位不正确和内存溢出问题:
数据定位不正确的原因是hibernate延迟加载时生成了临时属性,而json在序列化bean是会将所有属性都序列化,导致出现该问题;而内存溢出是因为hibernate映射关系级联查询链太长或出现循环导致json在序列化是占用了大量内存。解决办法为在bean中把不需要序列化的属性(一般为所有set类型的属性,即存在外键关系的属性)的getter方法加上@JSON(serialize=false)让json不序列化这些属性。