私はOracleを試していませんが、AS400のDB2テーブルに挿入するのと同様の問題がありました。
私は、DB2テーブルのID列のIDフラグを削除しなければならず、代わりにカスタムjpa/hibernateシーケンスジェネレータを使用しました。これは@IDエンティティフィールドのpojo/entityアノテーションに設定されています。
DB2は、SYSIBM.SYSSEQUENCESテーブルの欠落に関するエラーを表示していました。明らかに、hibernate(バージョン5.2)は、ネイティブDB2 IDの指定を認識しません。カスタムシーケンスが効果的な回避策でした。 @IDエンティティフィールドを
:
@GeneratedValue(発電= "テーブル"、戦略= GenerationType.TABLE)
@TableGenerator(名= "テーブル"、= 20 allocationSize)
この例では、テーブルを照会するたびに20個のシーケンス番号のプールを割り当てます。
次に、Hibernateはhibernate5 APIを一致列を持つ必要があります必要なテーブルを作成する - ...小文字でなければなりませんので、DB2のデフォルトに自動アッパーケースを回避するために名前の前後に引用符を置きます。これらの名前が大文字である場合、APIはエラーになります。
表: "hibernate_sequences" 使用2列の
例: "sequence_next_hi_value"(整数、NULL可能でない、0デフォルト) "SEQUENCE_NAME"(文字、サンプルの長さ20、ないNULL可能で、天然のデフォルト)使用方言の構成コードで
- EX:春ブートプログラム、これらのプロパティを追加します。
properties.put(「休止状態を。 supportsSequences "、" false "); properties.put( "hibernate.id.new_generator_mappings"、 "false");
と*。プロパティファイル:大文字と小文字を区別しスキーマの
spring.jpa.properties.hibernate.dialect.supportsSequences = falseを spring.jpa.properties.hibernate.id.new_generator_mappings = falseを
データベースシステムをしています/テーブル/フィールド名。また、すべてのタイプミスを監視します。プロパティ名。
pojo /エンティティには、テーブルにマップされるプライベートフィールドのみが含まれていることを確認してください。 serialVersionUIDなどのスタティックファイナルは正常です。
すぐにSQL Serverでも同様のことをやっていきます。
MySQLの場合、レコードを挿入するためにテーブルIDフィールドに定義されているID列を使用することに問題はありませんでしたので、これらの変更をすべて行う必要はありませんでした。 hibernateはMySQLのアイデンティティ指定を認識するので、より簡単な設定です。 @GeneratedValue(strategy = GenerationType.IDENTITY) は、pojoで必要とされたすべてでした。
私はこれで初心者ですから、いつもより良い方法を探しています...しかし、これは今のところうまくいきました。