ホームページ >データベース >mysql チュートリアル >Hibernate の MySQL INSERT ステートメントに予期しない自動インクリメント フィールドが含まれる問題を修正する方法は?

Hibernate の MySQL INSERT ステートメントに予期しない自動インクリメント フィールドが含まれる問題を修正する方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-06 16:25:14961ブラウズ

How to Fix Hibernate's Unexpected Auto-Increment Field Inclusion in MySQL INSERT Statements?

JPA アノテーションを使用した MySQL 自動インクリメント フィールドの注釈

JPA では、@GeneratedValue アノテーションを使用して、自動生成されたフィールドの値をどのように指定するかを指定します列が生成されるはずです。 MySQL の場合、自動インクリメント列は通常、GenerationType.IDENTITY 戦略を使用してマップされます。ただし、生成された SQL に自動インクリメント フィールドが含まれている場合は、構成の不一致が発生する可能性があります。

この場合、Operator オブジェクトには次の自動インクリメント フィールドがあります:

@Id
@GeneratedValue
private Long id;

このアノテーションは次の SQL を生成する必要があります:

insert 
into
    Operator
    (active, password, username) 
values
    (?, ?, ?)

ただし、提供されたログには、SQL に ID が含まれていることが示されています。列:

Hibernate: insert into Operator (active, password, username, id) values (?, ?, ?, ?)

これを解決するには、次の手順に従っていることを確認してください:

  1. MySQL 方言を指定します: Hibernate 構成で、 MySQL 方言 (MySQL5InnoDBDialect など) MySQL5Dialect.
  2. テーブル定義を確認します: 提供された DDL のように、問題のテーブルに自動インクリメント列が定義されていることを確認します:
CREATE TABLE `operator` ( 
`id` INT(10) NOT NULL AUTO_INCREMENT,
...
  1. コードを確認します: Operator エンティティを再確認し、それが正しいことを確認します。 @GeneratedValue で正しく注釈が付けられています。
  2. クリーン ビルドとデバッグ: クリーン ビルドを実行し、ビルド ディレクトリに矛盾がないか確認します。さらに、疑わしいアクティビティがないかログを検査します。

問題が解決しない場合は、ID 生成戦略を明示的に指定する必要がある場合があります:

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;

以上がHibernate の MySQL INSERT ステートメントに予期しない自動インクリメント フィールドが含まれる問題を修正する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。