0

テーブルAとBは1:Mの関係を持つ必要があります

aとbはアプリケーションの実行時に追加されるため、Aが作成され、次に4つのBが作成されます。後で追加したのと同じ順序でそれらを抽出できるように、各Bインスタンスは順番に並べる必要があります。

アプリはTomcatで実行されるWebアプリになるため、10個のインスタンスが同時に動作する可能性があります。

だから私の質問は:

1)挿入順序を保持して、Aが参照するBインスタンスを永続化したのと同じ順序で抽出できるようにする方法。コレクションに追加して保存されるので、これは注意が必要です(私は正しいですか?)。それで、それはHibernateがそれをどのように保存するかに依存します、それがインスタンスを追加したものの順序を変更した場合はどうなりますか?関係を説明するときにSETではなくLISTのようなものを見たことがありますが、それが必要ですか?

2)BテーブルのSEX(M、F、U)のように、インスタンスを区別できるように3番目の列をBに追加する方法。特別なテーブルが必要ですか、それともHibernateで定数を記述する簡単な方法がありますか。おすすめは何ですか?

3)並行性について言えば、どのような方法を使用することをお勧めしますか?データベースに衝突があってはなりません。ご覧のとおり、行が挿入されていない(PKが追加されている)場合、遅延なく呼び出された場所で衝突が発生する可能性があります。

4

1 に答える 1

3

A が永続化したのと同じ順序で A が参照する B インスタンスを抽出できるように、挿入順序を保持する方法。(...)

のような順序付きコレクションを使用しListます。リストは 2 つの異なる方法でマッピングできることに注意してください。

  • 順序付けられたリストとして、順序はデータベースで具体化されません
  • インデックス付きリストとして、順序はデータベースで具体化されます

セクション2.2.5.3.4 を参照してください。詳細については、インデックス付きのコレクション (リスト、マップ)

B テーブルの SEX(M,F,U) のようなインスタンスを区別できるように、B に 3 番目の列を追加する方法。特別なテーブルが必要ですか、それとも Hibernate で定数を記述する簡単な方法がありますか。おすすめは何ですか?

を B に使用し、enumでマップし@Enumeratedます。この前の回答を参照してください。

並行性について言えば、どの方法を使用することをお勧めしますか? データベースに衝突があってはなりません。ご覧のとおり、遅延なく呼び出された場所に行が挿入されていない場合 (PK が追加されている場合)、簡単に衝突が発生する可能性があります。

うーん...あなたのニーズに合ったトランザクションとロック戦略を使用してください(しかし、正直なところ、私は質問を理解したかどうかわかりません)。

于 2010-04-06T12:09:05.970 に答える