使用Hibernate时GWT异常“无法序列化”

时间:2012-03-08 14:59:53

标签: hibernate gwt serialization

当使用GWT + Hibernate时,我得到“com.google.gwt.user.client.rpc.SerializationException:”。我试过谷歌,但大多数错误都在List的上下文中(我在这里发现了一个类似的线程GWT Cannot Serialize My Object from Hibernate)。当我试图通过RPC传递UserPreference类型的对象时,我得到了这个。以下是供您参考的课程。

public class UserPreference implements Serializable {


private static final long serialVersionUID = 1L;
private UserInfo userInfo;

// other attributes

public UserPreference() {
    super();
}
    // getters/setters
}

// UserInfo Class

public class UserInfo implements Serializable{

private int id;
private String name;
private String cuid;    
private UserRole role;
private DbSchema favDb;

public UserInfo() {
    super();
}
}

// DbSchema类

public class DbSchema implements Serializable{

private static final long serialVersionUID = 1L;

private int id;
private String name;
private int port;
private String host;
private String sidName;
private String userName;
private String password;
private String defaultConfigId;

public DbSchema() {
    super();
}

    //getters/setters
}

我不知道我的'DbSchema'课程有什么问题。所有数据都可以从数据库中检索出来,当我在UserInfo类中将DbSchema实例设置为“瞬态”时,这样可以正常工作。我没有尝试使用Dozer或Gilead,但只是想知道代码的实际问题。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你有一个问题,因为Hibernate是lazy fetching引用的对象:当Hibernate创建UserInfo对象时,favDb不指向实际的DbSchema对象,而是指向Hibernate生成的代理(这实际上是通过getter / setter而不是字段本身实现的。)

一般解决方案是创建DTO(数据传输对象)。请参阅此博客文章以获取解释和解决方案:http://hibernate4gwt.sourceforge.net/hibernate_gwt_lazy_issue.html