Frage

Ich habe eine Entität mit einer OneToOne Beziehung, die träge abgerufene ist:

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

    @Column(length=60)
    private String address;

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

Dies ist der Test, den ich tun, versuchen, alle Einheiten zu erhalten und sie als JSON zu serialisiert, die JSONUtil-Klasse in JSONPlugin (die 'offizielle' json-Plugin für Struts 2):

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

Und das ist die Ausnahme, die ich bekomme (die gleiche Ausnahme, wenn ich dieses Plugin mit einer Struts2 Aktion verwenden und der @JSON Anmerkung):

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)
    ...

Ich bin mit Hibernate und der gleiche Code oben funktioniert, wenn ich hole ändern = FetchType.EAGER. Ich denke, verzögertes Laden ein Proxy-Objekt erzeugt, und das macht es nicht.

Meine Frage lautet: Ist es möglich, Objekte zu serialisieren, die träge geladen Attribute enthalten

?
War es hilfreich?

Lösung

Ich hatte das gleiche Problem, während JSON-lib verwenden, und es ist in der Tat, da das Objekt ein Proxy ist.

Ich fand Google-Gson Serialisierung von Hibernate behandelt Objekte besser, aber von natürlich hat es seine eigenen Macken, so dass Ihre Ergebnisse können variieren.

Andere Tipps

Trennen

Die Entitäten aus dem Ruhezustand und dann serialisiert sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top