2012-03-08 2 views
0

GWT + Hibernateを採用すると、「com.google.gwt.user.client.rpc.SerializationException:」が表示されます。私はGoogleに挑戦しましたが、エラーの大部分はListの文脈にあります(私は類似したスレッドGWT Cannot Serialize My Object from Hibernateを見つけました)。私はRPCを介してUserPreference型のオブジェクトを渡そうとしているときにこれを取得しています。あなたの参照のためのクラスは以下の通りです。GWT例外「Hibernateを使用しているときにシリアル化できません」

public class UserPreference implements Serializable { 


private static final long serialVersionUID = 1L; 
private UserInfo userInfo; 

// other attributes 

public UserPreference() { 
    super(); 
} 
    // getters/setters 
} 

//のUserInfoクラス

public class UserInfo implements Serializable{ 

private int id; 
private String name; 
private String cuid;  
private UserRole role; 
private DbSchema favDb; 

public UserInfo() { 
    super(); 
} 
} 

// DBSCHEMAクラス

public class DbSchema implements Serializable{ 

private static final long serialVersionUID = 1L; 

private int id; 
private String name; 
private int port; 
private String host; 
private String sidName; 
private String userName; 
private String password; 
private String defaultConfigId; 

public DbSchema() { 
    super(); 
} 

    //getters/setters 
} 

私はこの問題は、私の 'DBSCHEMA' クラスであるかわかりません。すべてのデータはDBから細かい検索されている、と私はのUserInfoクラスの「過渡的」としてDBSCHEMAインスタンスを作成するとき、これが正常に動作しています。私はDozerやGileadと一緒にやってみませんでしたが、コードの実際の問題を知りたいだけです。

ありがとうございました。

答えて

0

Hibernateはlazy fetching参照しているオブジェクトであるので、あなたは問題がある:のUserInfoオブジェクトはHibernateが作成されたとき、favDbが実際DbSchemaオブジェクトではなく休止、生成されたプロキシを指していない(これは実際に実装されているゲッター/セッターを経由していませんフィールド自体)。

一般的な解決策は、DTO(データ転送オブジェクト)を作成することです。説明と解決のために、このブログ投稿を参照してください:http://hibernate4gwt.sourceforge.net/hibernate_gwt_lazy_issue.html

+0

おかげで私に多くの時間を保存し、多くピーター... ...私はいくつかの他の記事からこの問題について読んでいたが、私はそれを把握することができませんでした。あなたの説明は簡単で明快でした。私の場合は、UserInfoと一緒にDbSchemaの詳細を取得する必要がありました。だから私はそれを行うためにハイバネートマッピングファイルを操作しただけです(fetch = "join")。私はしばらくの間、ドーザーとギレアドを取り除きました... – hashcoder

関連する問題