我有一个使用Hibernate映射到表的简单POJO。哪个工作得很好。
public class Patient implements Serializable {
private int patientId;
private String firstName;
private String lastName;
private Set<Prescription> patientPrescriptions;
public Patient() {}
...
}
我的问题是我希望能够序列化对象,以便我可以通过线路获取GWT-RPC调用。如果我的异步服务返回此对象,我会收到错误:
com.google.gwt.user.client.rpc.SerializationException:类型'org.hibernate.collection.PersistentSet'未包含在可由此SerializationPolicy序列化的类型集中,或者无法加载其Class对象。出于安全考虑,此类型不会被序列化。
我认为这是因为它无法序列化设置,因为这是一个接口,因此无法序列化。另一方面,Hibernate需要一个集合接口(Set / Map)才能工作。那么这意味着我不能再发送使用Hibernate映射的对象了?是否有一些“简单”的方法来序列化Set?
谢谢。
答案 0 :(得分:2)
只是添加有关我如何克服此序列化问题的详细信息:
1-我有2个数据模型对象(这很糟糕,但我没有时间让学校项目清理它)。
// The persistent data model class
public class PatientPersistent implements Serializable {
...
Set<Prescription> patientPrescriptions;
...
}
// The serializable over the wire (GWT-RPC) data model class
public class Patient implements Serializable {
...
Set<Prescription> patientPrescriptions;
...
}
2-我使用Dozer将持久模型&lt; ==映射到==&gt;可序列化数据类患者。像这样:
Patient thePatient = mapper.map(persistentObject, Patient.class);
我的Async服务将该患者发送回客户端。在该映射之后,您可以看到患者具有HashSet&lt;&gt;从java.util输入而不是hibernate非可序列化版本。
答案 1 :(得分:1)
问题是GWT没有找到注释和使用过的类的源代码。 GWT需要源代码,因为它必须将您的对象编译为JS。
我希望能够序列化 对象,所以我可以通过电线 我的GWT-RPC电话。
您可以使用Gilead来执行此操作。 (以前称为Hibernate4GWT)
我想这是因为它的事实 无法序列化Set,因为这是一个 接口因此不可序列化。上 另一方面Hibernate需要一个 集合界面(Set / Map)来 工作。所以这意味着我不能再这样了 发送使用Hibernate映射的对象?是 有一些“简单”的序列化方式 设置?
问题不在Set
,GWT可以通过GWT-RPC很好地序列化集合。虽然在传输过程中您需要使用HashSet
之类的特定实现来允许它针对该特定实现进行优化,而不是通用接口。