2011-04-05 43 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,每當此問題發生時。