web-dev-qa-db-ja.com

HibernateテーブルクラスはSerializableである必要がありますか?

Hibernate 3.0を使用してSQL Serverデータベースに接続するWebsphere Portalプロジェクトを継承しました。

このプロジェクトには、約130のHibernateテーブルクラスがあります。それらはすべてSerializableを実装しています。それらのどれもserialVersionUIDフィールドを宣言しないため、Eclipse IDEはこれらすべてのクラスに対して警告を表示します。

これらのクラスにSerializableを実装する実際の必要性はありますか?
[。

46
Scott Leis

これらのクラスにSerializableを実装する実際の必要性はありますか?

JPA仕様(JSR 220)は、それをかなりよく要約しています(Hibernateにも同じことが当てはまります)。

2.1エンティティクラスの要件

(...)

エンティティインスタンスが値によって分離オブジェクトとして渡される場合(たとえば、リモートインターフェイスを介して)、エンティティクラスはSerializableインターフェイスを実装する必要があります。

したがって、厳密に言えば、これは、切り離されたエンティティを別の層に送信したり、別のクラスターノードに移行したり、HTTPセッションに保存したりする必要がない限り、要件ではありません。

もしそうなら、生成されたserialVersionUIDフィールドを一度に多数のクラスに追加するツールはありますか

シリアルバージョン(Ant)タスク でバッチ処理できると思います。

60
Pascal Thivent

Hibernateは、シリアライズ可能をまったく必要としません。

6
bmargulies

Eclipseの「 Clean Up 」コマンドで実行できます。ただし、さらに多くのことを行うため、パッケージ全体で使用する前に、テストしてクリーンアップとフォーマット設定を調整します。

5
Chris Nava

その場合、生成されたserialVersionUIDフィールドを多数のクラスに一度に追加するツールはありますか(警告を消すためだけに)?

プロジェクトまたはワークスペース全体に対して、Eclipseのコンパイラ設定内でこの警告を無効にできます。

2
matt b

スクリプトを書くことはできますが、私は多くのクラスに対して自動的にそれを行うツールに慣れていません。

Eclipseで機械的に行う場合、クラスごとに4〜5秒以上かかることはありませんが、スクリプトよりも高速である可能性があります。

2
Uri