2009-03-16 7 views
1

nhibernateを使用して、挿入されたオブジェクトにプライマリキーを割り当てることを許可するにはどうすればよいですか?ジェネレータを型 "ID"として設定したいと思うが、ドキュメントにはこの "..resquire [s]を使用して2つのSQLクエリが新しいオブジェクトを挿入する"と書かれているようだ。それはなぜでしょうか?この機能を通常のINSERT SQL文のようにする方法はありますか?データベースでnhibernateのプライマリキーを選択させる

答えて

2

2つのクエリが必要な理由は、IDを使用すると、列が挿入されるまで列の値が定義されないためです。したがって、挿入後の選択には、挿入されたオブジェクトの列値を取得する必要があります。これはかなり標準的なもので、私は主キーとして自動生成されたキーを使用することを止めさせません。もう1つのオプションは、キーをデータベースに永続化する前に、新しいオブジェクトのGUIDを事前に生成することです。ほとんどの場合、自動生成されたキーが衝突するかもしれない別々のデータベースからデータをマージする必要があるなど、他の緩和的な状況が存在しない限り、私は実際にこれに利点がありません。

2

明らかな利点があります:NHibernateにidジェネレータとしてGuidsまたはHiloを使用させることで、NHibernate:バッチングで非常にクールな機能が有効になります。バッチ処理を使用するようにHibernateを設定するだけです(1000文ほど)、あなたの挿入物は突然非常に高速になります。

Fabioは、さまざまな利用可能なジェネレータについての投稿を持っていますhere - NHibernateを使用している場合(またはNHibernateがひどく動作すると思う人を知っている場合)は非常に便利です。

関連する問題