Domanda

Ho un'entità con una relazione OneToOne recuperata pigramente:

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

    @Column(length=60)
    private String address;

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

Questo è il test che faccio, cercando di ottenere tutte le entità e serializzarle come JSON, usando la classe JSONUtil in JSONPlugin (il plugin json" ufficiale "per Struts 2):

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

E questa è l'eccezione che ottengo (la stessa eccezione quando uso questo plugin con un'azione Struts2 e l'annotazione @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)
    ...

Sto usando Hibernate e lo stesso codice sopra funziona quando cambio fetch = FetchType.EAGER. Penso che il caricamento lento generi un oggetto proxy, e questo lo fa fallire.

La mia domanda è: È possibile serializzare oggetti che contengono attributi caricati pigramente?

È stato utile?

Soluzione

Ho avuto lo stesso problema durante l'utilizzo di JSON-lib, ed è proprio perché l'oggetto è un proxy.

Ho trovato Google-Gson gestisce meglio la serializzazione di oggetti Hibernate, ma di ovviamente ha le sue peculiarità, quindi il tuo chilometraggio può variare.

Altri suggerimenti

Scollega le entità dall'ibernazione & amp; quindi serializzarli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top