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