Struts2正在打包json格式惰性加载异常
如果在Hibernate中出现级联查询,可能会导致延迟加载。例如,我现在有一个Account类、一个Category类和一个Product类,它们从左到右是一对多的关系,并且@ many toone(fetch=fetch type . lazy)是从右到左设置的。我要找出商品信息,打包成json格式发送到前台。我在后台使用的查询语句是:从Product p左联接中取出p. Category,其中p. name像:的名称,这样我就可以找出Product,然后将该类别放在产品中。但是类别中的账户不是实际对象,而是临时代理对象,很容易理解,因为我勾选了产品,只有级联类别,类别和账户是根据实际情况配置的(LAZY)。现在把查询到的产品放到Map中,然后转为json格式返回前台,肯定会出现LAZY加载的问题,因为打开json的过程中会取Account对象,但是此时会话已经关闭,所以会报错。一个很直接但不是很好的解决方法是把Category中的lazy改为EAGER,这样就可以找出Account信息,但这并不好。所以我们用另一种方法:在struts.xml中设置黑名单,在转换为json格式时使用正则表达式过滤掉类别中的账户,这样就不会搜索到账户对象,也不会出现懒加载的问题。如下所示:
在这里,应该没有问题。然而,我仍然在我的项目中报告延迟加载异常,这意味着在我这样配置它之后,它不起作用。但是理论上,经过这个配置就可以了,数据正常可以打包成json格式发送到前台。这个问题困扰了我两天。后来,我干脆把LAZY改成了EAGER,开始了这个项目。今天,在另一个Hibernate异常中,我在这里联系到了异常并解决了!在今天的Hibernate中,我想调用get方法获取商品信息,但是无法获取。后台控制台中没有消息。因为我启动了dev模式,错误消息显示在前台:Java . lang . class castexcept 3360 cn . it . shop . model . product _ $ _ javassist _ 0不能强制转换为javassist.util.proxy.Proxy/span不能变成代理?你为什么想成为一名特工?代理人不能变成实际对象不是一般的吗?所以我在网上搜索了一下,这个问题可能是项目中javassist的一个jar包冲突导致的。我去项目部检查了一下,果然:
真的很矛盾。嘿.所以只需删除struts包中的javassist-3.11.0.GA.jar。Hibernate就在这里,可以正常取出商品信息。然后前两天想到了struts2转换为json的问题,于是我回去把EACH改回了LAZY。问题解决了,json可以正常转换了。很压抑,真的是jar包冲突造成的灾难。当时完全没有报错,但是前台找不到返回的json数据,只知道没有返回json数据。肯定是后台把json转换成JSON有问题。根据现有经验,90%的问题都是懒加载,但没想到是jar包冲突。后来:如果jar包不冲突,但是json不能转移,基本上就是懒加载造成的诅咒。通过在struts.xml中配置黑名单来过滤掉懒惰加载的对象非常实用,在POJO中更改配置非常方便。我想把任何字段转移到json,但是如果我不想的话就不要转。
原始链接:http://blog.csdn.net/eson_15/article/details/51394302
这就是本文的全部内容。希望对大家的学习有帮助,希望大家多多支持我们。
版权声明:Struts2正在打包json格式惰性加载异常是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。