2017-12-11 14 views
1

私はHibernateとOracleを使用しています。私は、オブジェクトを保存し、そのIDを取得します。このIDは、シーケンスを使用するトリガーによって生成されます。 (トリガーを使用する必要があります。)IDを取得するには現在2つの方法があります。1)ID列の最大値を見つける。 2)シーケンスの現在の値を見つける。どちらの方法も同じ問題を抱えています。つまり、このオブジェクトを保存してからIDを取得するまでに別の挿入が発生する可能性があります。 どうしてこのような間違った挿入を避けることができますか?Hibernateオブジェクトを保存した後に正しいIDを取得するには?

さらに、これらの2つのイベントは、IDを取得した後に終了しないトランザクションで発生します。言い換えれば、その後に起こることが起こります。したがって、テーブルをロックすると、トランザクションが終了するまでロックは解除されません。これは受け入れられません。

答えて

0

あなたのエンティティのためのシーケンスID generation strategyを使用している場合、あなたは、この問題を克服する必要があります

1)あなたはあなたのためのアップフロントのIdsの一定数を割り当て、利用可能となるallocationSizeを指定することができます特定の取引内であなたのために。

2)あなたがsession.save(entity)entityManager.persist(entity)をコールすると、Idは取引方法の終わりまで待つ必要と実際のflushcommitせずに、呼び出しの後すぐに使用可能になります。

関連する問題