Плагин Struts2 JSON не работает с "ленивыми" данными - PullRequest
0 голосов
/ 15 января 2009

У меня есть сущность с отношением 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, используя класс JSONUtil в 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, и тот же код работает выше, когда я меняю fetch = FetchType.EAGER. Я думаю, что отложенная загрузка генерирует прокси-объект, и это приводит к сбою.

Мой вопрос: Можно ли сериализовать объекты, содержащие лениво загруженные атрибуты?

Ответы [ 2 ]

1 голос
/ 21 июня 2011

Отделите сущности от Hibernate, а затем сериализуйте их.

1 голос
/ 11 февраля 2009

У меня была такая же проблема при использовании JSON-lib, и это действительно потому, что объект является прокси.

Я нашел Google-Gson лучше обрабатывает сериализацию объектов Hibernate, но, конечно, у него есть свои особенности, поэтому ваш пробег может отличаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...