0

私はネイティブ ID に問題があり、正しく行っているかどうかわかりません。

生成された ID を持つ Aircraft というクラスがあります。ただし、そのネイティブ ID は、以下のようにシリアル番号 (整数) とモデル (カスタム クラス) です。

public class Aircraft{

@Id @GeneratedValue(strategy=GenerationType.AUTO,generator="COD_NS_AENV")
@Column(name="COD_NS")
private Integer id;
@Column(name="NUM_IDENT_NS_AENV")
@NaturalId
private Integer serialNumber;
@ManyToOne
@NaturalId
private Model model;

.
.
.
}

このクラスを XML からロードし、次のようにデータベースに保存します。

.
.
.
Aircraft aircraft= (Aircraft)xstream.fromXML(reader);
Session session =  HibernateUtil.openSession();
Transaction t = session.beginTransaction();

session.saveOrUpdate(aircraft.getModelo());
session.saveOrUpdate(aircraft);
t.commit();
session.close();

挿入には問題なく機能しますが、私の問題は、このコードを同じ情報で再度実行すると、Hibernate が別の航空機を挿入することです。Hibernate が現在のレジストリのみを更新することを望みます。

serialNumber 属性と Model 属性をテストするために equals() メソッドをオーバーライドしましたが、呼び出されません。

serialNumber と model を持つオブジェクトが NativeId であることを Hibernate に理解させる方法がわかりません。

前もって感謝します!

アレクサンドル

4

1 に答える 1

0

ほとんどの場合、Hibernate は@Idプロパティを使用するだけで、毎回新しい値を生成します。これは、XML からオブジェクトを読み取り、id が XML にないために発生すると思います。私は、自然 ID が自動生成されたサロゲート ID とうまく共存するとは思わない。saveOrUpdateHibernateのid場合、オブジェクトが新しいかどうかを判断するために調べます。

詳細については、Hibernate フォーラムを参照してください。

于 2011-07-14T17:49:44.323 に答える