当使用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,但只是想知道代码的实际问题。
感谢您的帮助。
答案 0 :(得分:0)
你有一个问题,因为Hibernate是lazy fetching引用的对象:当Hibernate创建UserInfo对象时,favDb
不指向实际的DbSchema
对象,而是指向Hibernate生成的代理(这实际上是通过getter / setter而不是字段本身实现的。)
一般解决方案是创建DTO(数据传输对象)。请参阅此博客文章以获取解释和解决方案:http://hibernate4gwt.sourceforge.net/hibernate_gwt_lazy_issue.html