我有2个可序列化的零构造函数实体,与@OneToMany关系(如果我只使用一个没有@OneToMany列表的实体,一切正常):
@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
}
当我添加@OneToMany注释时出现问题:
SEVERE:调度传入的RPC调用时发生异常 com.google.gwt.user.client.rpc.SerializationException:类型'org.hibernate.collection.PersistentBag'未包含在可由此SerializationPolicy序列化的类型集中,或者无法加载其Class对象。出于安全考虑,此类型不会被序列化:在com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:619)中的instance = []
我的实体名单有什么问题?
答案 0 :(得分:2)
您必须使用数据传输对象(DTO),阅读:http://www.gwtproject.org/articles/using_gwt_with_hibernate.html,尤其是“为什么Hibernate对象到达浏览器世界时无法理解”部分。或者使用RequestFactory(http://www.gwtproject.org/doc/latest/DevGuideRequestFactory.html)而不是GWT-RPC。
答案 1 :(得分:0)
正如philfr49暗示的那样,GWT和Hibernate有时会遇到一些麻烦。它已被详细记录,您可以阅读他发送的链接中的一些替代方案。您可以避免使用GWT-RPC,避免使用Hibernate,也可以稍微努力使它们兼容。
我有一个GWT和Hibernate一起使用的项目;我使用数据传输对象,并使用Moo翻译和更新域和DTO。有时候这有点痛苦,但我在一定程度上建造了Moo以使这项工作变得更容易。您可以使用其他类似的框架(例如Dozer等)
最终,决定如何最好地解决这个问题是你必须为自己的项目解决的问题。