我们使用json-lib包来用json转换hibernate持久化对象时候需要注意
如果持久化对象采用了延迟加载,或者持久化对象和另一持久化对象循环引用的时候,如何直接用
JSONArray jr = JSONArray.fromObject(Object);
这样的话 就会报错:java.lang.NoSuchMethodException: Property 'delegate' has no getter method
起初我被这个异常给迷惑了,以为就是简单的找不到 delegate变量的 getter方法。
实际上是由于采用了延迟加载或者循环引用引发的异常。
解决的办法如下:
新建两个类:HibernateJsonBeanProcessor和HibernateJsonBeanProcessorMatcher
HibernateJsonBeanProcessor代码如下:
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processors.*;
public class HibernateJsonBeanProcessor implements JsonBeanProcessor {
public JSONObject processBean(Object obj, JsonConfig jsonConfig) {
return new JSONObject();
}
}
HibernateJsonBeanProcessorMatcher代码如下:
import net.sf.json.processors.*;
import java.util.Set;
import org.apache.log4j.Logger;
public class HibernateJsonBeanProcessorMatcher extends JsonBeanProcessorMatcher {
private static Logger log = Logger
.getLogger(HibernateJsonBeanProcessorMatcher.class);
@Override
public Object getMatch(Class target, Set set) {
if (target.getName().contains("$$EnhancerByCGLIB$$")) {
log.warn("Found Lazy-References in Hibernate object "
+ target.getName());
return org.hibernate.proxy.HibernateProxy.class;
}
return DEFAULT.getMatch(target, set);
}
}
这两个类完成之后,我们用json转换持久化对象就变成了这样:
JsonConfig conf = new JsonConfig();
conf.registerJsonBeanProcessor(
org.hibernate.proxy.HibernateProxy.class,
new HibernateJsonBeanProcessor());
conf.setJsonBeanProcessorMatcher(new HibernateJsonBeanProcessorMatcher());
JSONArray jr = JSONArray.fromObject(device, conf);
这里这个device即为我们的持久化对象。
OK !经过这2步之后,程序运行正常!
分享到:
相关推荐
网上有很多关于C++ delegate机制的文章,但都讲的是函数指针的内容,上周就C++中实现C#的delegate机制的问题研究了好几天,查看了很多相关资料,才解决了问题,现将我写的C++ delegate测试程序贴出来,希望能帮到有...
delegate_execute.exe
C# Delegate讲解C# Delegate讲解C# Delegate讲解C# Delegate讲解
对iOS的delegate代理方式不是很清楚的同学可以来看看,很简单的代码,看过之后应该给你有帮助
本例子演示了iPhone开发中最常用到的两个类之间互相通信的方法之一:delegate
ios设计模式delegate 示例 ,导航功能的两个视图控制器(用push方式从一个窗口推到另一个窗口),第二个窗口创建两个按钮,标题分别为红色和绿色,点相应的按钮弹回前一个窗口,同时前一个窗口的背影色变成按钮标题...
delegate、五步曲、调用照相机、切换键盘
delegate_exe
CSharp_Delegate C#委托 本人博客中的示例代码
网上也有很多Delegate的Demo,比较乱,感觉不容易看懂。本来一个很简单的问题,大家搞得这么复杂。这个Demo就通俗易懂、简单、实用
ios applicationDelegate使用;ios applicationDelegate使用
oc中以delegate实现页面间的传值过程
delegate进行GameObject之间的通信.pdf
适合初学者了解C#的delegate,是一个非常简单的例子。
C# delegate thread范例 若不懂在代码中,线程如何调用的可以看看
delegate与block的使用
delegate和block是iOS上常用于实现回调的两种机制,Demo将两者进行了简单的归类与对比。
iOS 的delegate代码是http://blog.csdn.net/ilikeprograming/article/details/26206075的附件。这份代码有助于新手理解delegate。
(Swift)SceneDelegate中启动UI
delegate和block的使用