我有一个实体与一个OneToOne关系即取出懒惰地:

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

    @Column(length=60)
    private String address;

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

这是在测试我做的,试图让所有的实体和他们序列化为JSON,使用的 JSONPlugin ( '官方' JSON插件的Struts 2):

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

和这是例外,我得到(相同的异常时,我使用这个插件与Struts2的行动和@JSON注释):

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和当我改变取= FetchType.EAGER上述相同的代码工作。 我认为迟缓装载生成代理对象,这使得它失败。

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

有帮助吗?

解决方案

我有同样的问题,而使用JSON-lib和它确实是因为对象是一个代理。

我发现谷歌,GSON 处理的Hibernate对象的序列化更好,但当然,它有它自己的怪癖,所以你的里程可能会有所不同。

其他提示

从Hibernate拆下实体&然后序列化。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top