1

@OneToMany 関係を使用して、コンストラクターがゼロのエンティティでシリアライズ可能な 2 つがあります (@OneToMany リストを使用せずにエンティティを 1 つだけ使用すると、すべてが正しく機能します)。

@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 アノテーションを追加すると問題が発生します。

SEVERE: 着信 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 オブジェクトがブラウザーの世界に到達したときに理解できない理由」の部分を読んでください。または、GWT-RPC の代わりにRequestFactory ( http://www.gwtproject.org/doc/latest/DevGuideRequestFactory.html ) を使用します。

于 2013-09-30T06:50:27.030 に答える
0

philfr49 が暗示したように、GWT と Hibernate は連携する際に問題が発生することがあります。十分に文書化されており、彼が送信したリンクでいくつかの代替案について読むことができます. GWT-RPC を回避するか、Hibernate を回避するか、互換性を持たせるためにもう少し努力することができます。

GWT と Hibernate を一緒に使用するプロジェクトがあります。私はデータ転送オブジェクトを使用し、 Mooを使用してドメインと DTO を変換および更新します。少々面倒なこともありますが、Moo を作成した理由の 1 つは、その作業を簡単にするためです。使用できる他の同様のフレームワークがあります (例: Dozer など)。

最終的に、これに対処する最善の方法を決定することは、自分のプロジェクトで解決しなければならないことです。

于 2013-10-01T03:33:12.857 に答える