使用实体列表@OneToMany时发生GWT RPC序列化异常
我有两个可序列化的构造函数实体为零,具有@OneToMany关系(如果我只使用一个实体而没有@OneToMany列表,则一切正常):使用实体列表@OneToMany时发生GWT RPC序列化异常,gwt,serialization,gwt-rpc,Gwt,Serialization,Gwt Rpc,我有两个可序列化的构造函数实体为零,具有@OneToMany关系(如果我只使用一个实体而没有@OneToMany列表,则一切正常): @实体 @表(name=“directory”) 公共类目录实现可序列化{ @身份证 @GeneratedValue(策略=GenerationType.AUTO) 私人长id; 私有字符串名称; @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER) 私有列表值; 公共目录(){} ... 接球手和接球
@实体
@表(name=“directory”)
公共类目录实现可序列化{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
私有字符串名称;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
私有列表值;
公共目录(){}
...
接球手和接球手
}
@实体
@表(name=“directoryvalues”)
公共类DirectoryValues实现可序列化{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
私有字符串值;
public DirectoryValues(){}
...
接球手和接球手
}
添加@OneToMany批注时出现问题:
严重:调度传入RPC调用时发生异常
com.google.gwt.user.client.rpc.SerializationException:类型“org.hibernate.collection.PersistentBag”未包含在此可由此序列化策略序列化的类型集中,或者无法加载其类对象。出于安全目的,不会序列化此类型:com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:619)上的instance=[]
实体中的列表有什么问题?您必须使用数据传输对象(DTO),如下所示:尤其是“为什么Hibernate对象到达浏览器世界时无法理解”部分。或者使用RequestFactory()而不是GWT-RPC。正如philfr49所暗示的,GWT和Hibernate有时在一起工作时会遇到一些问题。这已经被很好地记录下来了,你可以在他发送的链接中阅读到一些备选方案。您可以避免GWT-RPC、避免Hibernate,或者更努力地使它们兼容 我有一个项目,GWT和Hibernate一起使用;我使用数据传输对象,并使用转换和更新域和DTO。有时候这有点痛苦,但我建立Moo的部分原因是为了让工作更容易。您还可以使用其他类似的框架(如推土机等)
最终,您必须为自己的项目确定如何最好地解决这个问题。我认为,当您有一对多映射时,您应该使用
集。你能试试吗?
@Entity
@Table(name = "directory")
public class Directory implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String documentName;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<DirectoryValues> dirValues;
public Directory() {}
...
getters and setters
}
@Entity
@Table(name = "directoryvalues")
public class DirectoryValues implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String value;
public DirectoryValues() {}
...
getters and setters