1

私はGWT、Hibernate、Gileadを使用していますが、シリアル化の例外を取り除くことはできません。

com.google.gwt.user.client.rpc.SerializationException: Type '[Ljava.lang.Object;' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.

Hibernateクエリ言語でJOINを実行しているため、エラーが発生します。

List<UserEvent> userEvents = session.createQuery(
    "FROM UserEvent as userevent JOIN userevent.event as event WHERE userevent.user = ? AND userevent.status = 'JOIN' ORDER BY event.eventBegin ASC")
    .setLong(0, user.getUserID()).setFirstResult(start).setMaxResults(maxResult).list();

クラスのコードは次のとおりです。

@Entity
public class UserEvent extends LightEntity implements Serializable {

    private static final long serialVersionUID = -291120580889352994L;

    @Id
    @ManyToOne
    @JoinColumn(name = "user_userid")
    private User user;

    @Id
    @ManyToOne
    @JoinColumn(name = "event_eventid")
    private Event event;

    @Enumerated(EnumType.STRING)
    private EventStatus status;

    private Long time;

    public UserEvent() {

    }



@Entity
public class Event extends LightEntity implements Serializable {

    private static final long serialVersionUID = -2504468186803850440L;

    @Id
    @GenericGenerator(name = "event_seq", strategy = "webapp.hibernate.EventSeq")
    @GeneratedValue(generator = "event_seq")
    private Long eventID;

    private Long eventBegin;

    public Event() {

    }

誰かがこれの解決策を知っていますか?

4

1 に答える 1

0

ここで見ている問題は、

query.list()

呼び出しが UserEvents をロードしていません。UserEvent の動的プロキシをロードしています。Hibernate はプロキシ オブジェクトを使用して、遅延ロードされた関連オブジェクトへの呼び出しをインターセプトします。

これに役立つライブラリがあります (EG http://www.jboss.org/errai )。

もう 1 つできることは、JPA エンティティをシリアル化する前に POJO に変換することです。これにより、プロキシが邪魔にならないようにする必要があります。

于 2012-03-10T16:44:03.560 に答える