1

我有 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 注释时出现问题:

严重:调度传入的 RPC 调用 com.google.gwt.user.client.rpc.SerializationException 时出现异常:类型“org.hibernate.collection.PersistentBag”未包含在可由此 SerializationPolicy 或其类序列化的类型集中无法加载对象。出于安全考虑,此类型不会被序列化。: instance = [] at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:619)

我的实体列表有什么问题?

4

2 回答 2

2

您必须使用数据传输对象 (DTO),请阅读: http: //www.gwtproject.org/articles/using_gwt_with_hibernate.html,尤其是“为什么 Hibernate 对象在到达浏览器世界时无法被理解”部分。或者使用 RequestFactory ( http://www.gwtproject.org/doc/latest/DevGuideRequestFactory.html ) 而不是 GWT-RPC。

于 2013-09-30T06:50:27.030 回答
0

正如 philfr49 所暗示的那样,GWT 和 Hibernate 有时在协同工作时会遇到一些麻烦。它已被详细记录,您可以在他发送的链接中阅读一些替代方案。您可以避免 GWT-RPC,避免 Hibernate,或者更加努力地使它们兼容。

我有一个项目同时使用 GWT 和 Hibernate;我使用数据传输对象,并使用Moo翻译和更新域和 DTO 。有时这有点痛苦,但我构建 Moo 的部分原因是为了让这项工作更容易。您可以使用其他类似的框架(例如 Dozer 等)

最终,决定如何最好地解决这个问题是您必须为自己的项目制定的。

于 2013-10-01T03:33:12.857 回答