まず、PostgreSQLデータベースの永続性プロバイダーとしてJPA2.0とHibernate3.5を使用しています。
JPA 2.0アノテーションを介してデータベースのシーケンスを単一フィールド代理キーの自動生成値として正常に使用し、すべて正常に機能します。
現在、次の方法で混合キーを必要とするバイテンポラルデータベーススキームを実装しています。
Table 1:
id (pk, integer, auto-generated-sequence)
validTimeBegin (pk, dateTime)
validTimeEnd (dateTime)
firstName (varChar)
今、問題があります。ご覧のとおりINSERT
、新しい要素の場合、フィールドid
は自動生成され、問題ありません。UPDATE
ただし、このスキーム内のフィールドが必要な場合はvalidTimeBegin
、-fieldを変更せずに列を変更し、id
次のように新しい行として挿入する必要があります。
行の更新前:
|---|-------------------------|-------------------------|-------------------|
| id| validTimeBegin | validTimeEnd | firstName |
|---|-------------------------|-------------------------|-------------------|
| 1| 2010-05-01-10:00:00.000 | NULL | Gerald |
|---|-------------------------|-------------------------|-------------------|
正確に2010-05-01-10:35:01.788サーバー時間に発生する行の更新後:
(we update the person with the id:1 to reflect his new first name...)
|---|-------------------------|-------------------------|-------------------|
| id| validTimeBegin | validTimeEnd | firstName |
|---|-------------------------|-------------------------|-------------------|
| 1| 2010-05-01-10:00:00.000 | 2010-05-01-10:35:01.788 | Gerald |
|---|-------------------------|-------------------------|-------------------|
| 1| 2010-05-01-10:35:01.788 | NULL | Jerry |
|---|-------------------------|-------------------------|-------------------|
したがって、私たちの問題は、フィールドに自動生成されたシーケンスを使用すると、これがまったく機能しないことですid
。新しい行を挿入すると、idは常に自動生成されますが、実際には複合キーの一部であり、動作する場合があります。別の方法で。
だから私の質問は:id
同じ人の新しい品種を生成し、他のすべての場合に通常どおり続行したい場合に、JPAを介して休止状態にフィールドの自動生成を停止するように指示する方法はありますか?カスタムコードでID生成全体を引き継ぎますか?
よろしくお願いします、ジェラルド