0

PK のトリガーとシーケンスを使用する Oracle DB テーブルでエンティティを永続化する方法について助けが必要です。今までに、他のスタックオーバーフローの質問からこれらを試しました:

@Id 
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy="increment")

このアプローチは機能します。PK の最大値を見つけて、値を 1 増やします。しかし、これは Db シーケンスを更新せず、ある時点で「制約違反」エラーを引き起こします。

@Id 
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="id_sequence")
@SequenceGenerator(name="id_sequence", sequenceName="MY_DB_SEQ")

このアプローチも私にはうまくいきません。悲しいことに、Db シーケンスにアクセスできず、内部で実行しようとすると「デュアルから MY_DB_SEQ.nextval を選択してください」というエラーが発生します。アクセスできないのはなぜですか?行ってDB管理者に尋ねてください:)

ID が null の場合に DB シーケンスを使用して nextval を取得する DB トリガーが、DB レコードに PK 値を割り当てるように、Entity PK 属性に null を渡すことが唯一のオプションのようです。

@Id に null 値を渡すにはどうすればよいですか? もちろん、これは必要なためエラーをスローしています。これに使用できる他の注釈はありますか?

これが不可能な場合、他にどのような方法を試す必要がありますか?

ご協力いただきありがとうございます。

アップデート

ユーザーがアクセスできないDB Seqがあり、DBがPKのNULL値をチェックするトリガーを使用してseq nexvalを実行するためにNULLをPKに渡す必要がある場合、これに対する別の方法を見つけることができませんでした。DB Seq へのアクセスを許可した後、このアプローチはもちろん機能します。

@Id 
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="id_sequence")
@SequenceGenerator(name="id_sequence", sequenceName="MY_DB_SEQ")
4

2 に答える 2