【问题标题】:Serializable Hibernate data object for GWT RPCGWT RPC 的可序列化 Hibernate 数据对象
【发布时间】:2011-03-18 00:00:48
【问题描述】:

我有一个使用 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 对象.出于安全考虑,此类型不会被序列化。

我想这是因为它无法序列化 Set,因为这是一个接口,因此不可序列化。另一方面,Hibernate 需要一个集合接口(Set/Map)才能工作。所以这意味着我不能再发送使用 Hibernate 映射的对象?是否有一些“简单”的方法来序列化 Set?

谢谢。

【问题讨论】:

    标签: hibernate gwt rpc serializable


    【解决方案1】:

    只是添加有关我如何克服此序列化问题的详细信息:

    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 将持久模型 可序列化数据类 Patient。像这样:

    Patient thePatient = mapper.map(persistentObject, Patient.class);
    

    此患者由我的异步服务发送回客户端。在这个映射之后,你可以看到 Patient 有一个来自 java.util 的 HashSet 类型,而不是 hibernate 不可序列化的版本。

    【讨论】:

      【解决方案2】:

      问题是GWT没有找到注解的源代码和使用的类。 GWT 需要该源代码,因为它必须将您的对象编译成 JS。

      我希望能够序列化 对象,所以我可以通过电线得到它 用于我的 GWT-RPC 调用。

      您可以使用Gilead 来执行此操作。 (以前称为 Hibernate4GWT)

      我想这是因为它 无法序列化 Set,因为这是一个 接口因此不可序列化。在 另一方面,Hibernate 需要一个 集合接口(Set/Map)到 工作。所以这意味着我不能再 发送用 Hibernate 映射的对象?是 有一些“简单”的方法来序列化 设置好了吗?

      问题不在于Set,GWT 可以通过其 GWT-RPC 很好地序列化集合。尽管在传输过程中您会希望使用像 HashSet 这样的特定实现来允许它针对该特定实现进行优化,而不是使用通用接口。

      【讨论】:

      • 会试试这个。还发现这个其他链接几乎是同一个问题。谢谢。 stackoverflow.com/questions/3183269/…
      • 谢谢,虽然我使用(至少现在)推土机解决方案。我现在了解这个 GWT JRE 仿真库问题。
      猜你喜欢
      • 2013-05-20
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 2012-04-18
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多