2011-04-05 42 views
2

我使用GWT和JPA进行持久化。我创建了一个域JPA附魔类,DAO和RPC用于它们之间的通信。一切正常,通过RPC客户端发送对象到服务器,但无法得到响应。服务器无法以与客户端兼容的方式进行反序列化。所以我不能使用服务器回调回客户端。异常消息是这样的:GWT JPA - 响应无法反序列化

无法 反序列化的响应, com.google.gwt.user.client.rpc.SerializationException

这是我的一个类的示例代码:

@Entity 
@Table(name="course") 
public class Course implements Serializable { 
    private static final long serialVersionUID = 1L; 
    private int courseId; 
    private String name; 
    private List<Group> groups; 
    private List<Module> modules; 

    public Course() { 
    } 


    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(unique=true, nullable=false) 
    public int getCourseId() { 
     return this.courseId; 
    } 

    public void setCourseId(int courseId) { 
     this.courseId = courseId; 
    } 


    @Column(nullable=false, length=100) 
    public String getName() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 


    //bi-directional many-to-one association to Group 
    @OneToMany(mappedBy="course", fetch=FetchType.LAZY) 
    public List<Group> getGroups() { 
     return this.groups; 
    } 

    public void setGroups(List<Group> groups) { 
     this.groups = groups; 
    } 


    //bi-directional many-to-one association to Module 
    @OneToMany(mappedBy="course", fetch=FetchType.LAZY) 
    public List<Module> getModules() { 
     return this.modules; 
    } 

    public void setModules(List<Module> modules) { 
     this.modules = modules; 
    } 

} 
  • 如果删除了关系它的工作的罚款。这样做是因为集合像列表,集合的e.t.c被转换成GWT客户端无法处理的hibernate对象。
+0

请显示一些代码 – 2011-04-05 21:38:58

+0

请注意什么样的List hibernate返回。在你的getter上,你可以尝试明确列表的类型 - 例如返回一个'ArrayList',并在方法体中返回一个'new ArrayList (existingList);' – Finbarr 2011-04-06 11:35:47

回答

0

如果您正在使用GWT-RPC,请确保您尝试序列化的所有类都具有公共默认(无参数)构造函数并实现Serializable。如果你有嵌入类,它们也必须有一个无参数构造函数。

+0

是的他们实现了Serializable而没有结果..我也尝试了IsSerializable而没有结果。 – 2011-04-05 14:44:42

+0

他们是否有一个no-参数构造函数明确定义? – 2011-04-05 14:51:01

+0

是的,他们没有参数构造器,实际上它们是从mysql数据库自动生成的 – 2011-04-05 14:51:48

0

有一次,我准备了gwt-jpa样品this question。这只是JPA实体的序列化..它可能会给你一个关于你的情况有什么不对的线索。

+0

非常感谢。虽然这个链接已经打破,请你能给我一个与样本的新链接吗? – 2011-04-05 17:18:59

+0

可以再试一次吗.. – 2011-04-05 17:33:43

+0

非常感谢,我明白了! – 2011-04-05 22:18:57

1

那么问题是我的类有@OneToMany关联到另一个类。如果我删除关联它工作很好。但这是不可能的,因为我使用规范化的关系数据库

+0

答案是使用Gilead。 – 2011-05-05 06:28:14

0

得到它的工作......战争的重新部署后再次... strange..cant指向一个具体的东西(像我一样清楚的浏览器缓存/月食类输出/重新启动eclipse) 显然,解决方法似乎是尝试重新部署webapp,每当此问题发生时。