Struts2 JSON插件不能与“懒惰"一起使用.数据 [英] Struts2 JSON Plugin not working with "lazy" data

查看:94
本文介绍了Struts2 JSON插件不能与“懒惰"一起使用.数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个实体,该实体具有一个懒惰地获取的OneToOne关系:

I have an Entity with a OneToOne relation that is fetched lazily:

@Entity
public class Person {
    @Id
    private Integer id;

    @Column(length=60)
    private String address;

    @OneToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="idProvince")
    private Province province;
}

这是我所做的测试,尝试使用

This is the test I do, trying to get all the entities and to serialize them as JSON, using the JSONUtil class in JSONPlugin (the 'official' json plugin for Struts 2):

    List<Person> people = personService.findAll();
    String result = JSONUtil.serialize(people);
    System.out.println(result);

这是我得到的异常(当我将此插件与Struts2 Action和@JSON注释一起使用时,是相同的异常):

And this is the exception I get (the same exception when I use this plugin with a Struts2 Action and the @JSON annotation):

com.googlecode.jsonplugin.JSONException: java.lang.IllegalAccessException:
Class com.googlecode.jsonplugin.JSONWriter can not access a member of class 
org.postgresql.jdbc4.AbstractJdbc4Statement with modifiers "public"
    at com.googlecode.jsonplugin.JSONWriter.bean(JSONWriter.java:237)
    at com.googlecode.jsonplugin.JSONWriter.process(JSONWriter.java:159)
    at com.googlecode.jsonplugin.JSONWriter.value(JSONWriter.java:125)
    at com.googlecode.jsonplugin.JSONWriter.array(JSONWriter.java:407)
    at com.googlecode.jsonplugin.JSONWriter.process(JSONWriter.java:149)
    at com.googlecode.jsonplugin.JSONWriter.value(JSONWriter.java:125)
    at com.googlecode.jsonplugin.JSONWriter.write(JSONWriter.java:93)
    at com.googlecode.jsonplugin.JSONWriter.write(JSONWriter.java:76)
    at com.googlecode.jsonplugin.JSONUtil.serialize(JSONUtil.java:62)
    ...

我正在使用Hibernate,并且当我更改fetch = FetchType.EAGER时,上面的相同代码有效. 我认为延迟加载会生成一个代理对象,这会使它失败.

I am using Hibernate and the same code above works when I change fetch=FetchType.EAGER. I think lazy loading generates a proxy-object, and that makes it fail.

我的问题是:是否可以序列化包含延迟加载属性的对象?

推荐答案

在使用JSON-lib时,我遇到了同样的问题,这确实是因为对象是代理.

I had the same problem while using JSON-lib, and it is indeed because the object is a proxy.

我发现 Google-Gson 可以更好地处理Hibernate对象的序列化,但是当然它有自己的怪癖,所以您的里程可能会有所不同.

I found Google-Gson handles serialization of Hibernate objects better, but of course it has its own quirks, so your mileage may vary.

这篇关于Struts2 JSON插件不能与“懒惰"一起使用.数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆