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 Query Language 执行 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()

调用未加载用户事件。它正在加载 UserEvent 的动态代理。Hibernate 使用代理对象来拦截对延迟加载的相关对象的调用。

有一些图书馆可以帮助解决这个问题(EG http://www.jboss.org/errai)。

您可以做的另一件事是在尝试序列化 JPA 实体之前将它们转换为 POJO,这应该确保代理不会妨碍它们。

于 2012-03-10T16:44:03.560 回答