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")