0

hbm2ddlMavenプラグインを使用して目標を追加すると、このDDL(postgresターゲット)が取得されhibernate3-maven-pluginます。

create table listing (
    id varchar(36) not null,
    hash_code int4 not null,
    version int4,
    name varchar(100),
    primary key (id)
);

表示されているすべての列を定義しました。

私がウェブ上で見た使用のすべての例:

private static final long serialVersionUID = -8402611044513083864L;

@Column注釈はありません。私のDDLにはそのための列がありません。他に誰かいますか?

では、Javaの逆シリアル化コードは、どのバージョンのクラスがシリアル化および保存されているのか、それが逆シリアル化されているのかをどのように知るのでしょうか。

4

2 に答える 2

3

シリアル バージョン UID は、オブジェクトがシリアル化/逆シリアル化されるときに使用されます。

オブジェクトに JPA エンティティとして注釈を付ける場合、シリアライゼーションを使用していませんが、オブジェクトを別の表現 (データベース テーブルの行として) に変換しているだけです。
データベースから行をフェッチすると、このデータを使用して、適切に設定された状態でオブジェクトの新しいインスタンスが作成されます。

一方、シリアル化は、オブジェクトのバイナリ表現を構築し、逆シリアル化プロセスを使用してオブジェクト インスタンスを再作成する場合に使用されます。

JPA でシリアライゼーションを使用できることに注意してください。つまり、フィールドを (JPA エンティティ内で) 永続化したい場合です。このフィールドは、基本型でも埋め込み可能でも他のエンティティでもなく、Serializable マーカー インターフェイスを実装する単なる Java クラスです。
ただし、この場合、エンティティ内のこの特定のフィールドのみが、シリアライゼーション/デシリアライゼーションを使用してバイナリ データをデータベース列に配置します。それでも - シリアル バージョンの UID はデータベースのどこにも保存されません。

永続フィールド (永続フィールドと非永続フィールド) の詳細については、 JPA 2.0 FR 仕様の2.2 Persistent Fields and Propertiesの章を参照してください。

于 2011-12-12T00:52:01.190 に答える
2

静的値はシリアライズされず、JPA は Java シリアライゼーションを使用しません。

于 2011-12-12T00:24:32.280 に答える