sql >> データベース >  >> RDS >> Mysql

MYSQL自動インクリメントフィールドにJPAアノテーションを付ける方法

    MySQLのAUTO_INCREMENTを使用するには 列では、IDENTITYを使用することになっています 戦略:

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

    これは、AUTOを使用したときに得られるものです MySQLの場合:

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

    これは実際には

    と同等です
    @Id @GeneratedValue
    private Long id;
    

    つまり、マッピングは機能するはずです。ただし、Hibernateはidを省略する必要があります SQL挿入ステートメントの列ですが、そうではありません。どこかにある種のミスマッチがあるに違いありません。

    Hibernate構成でMySQLダイアレクトを指定しましたか(おそらくMySQL5InnoDBDialect またはMySQL5Dialect 使用しているエンジンによって異なります)?

    また、誰がテーブルを作成しましたか?対応するDDLを表示できますか?

    フォローアップ: 私はあなたの問題を再現することはできません。 yourのコードを使用する エンティティとあなたの DDL、HibernateはMySQLで次の(予想される)SQLを生成します:

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

    idに注意してください 予想どおり、上記のステートメントには列がありません。

    要約すると、コード、テーブル定義、方言は正しく、一貫性があり、機能するはずです。うまくいかない場合は、何かが同期していない(クリーンビルドを実行する、ビルドディレクトリを再確認するなど)か、他の何かが間違っている(疑わしい点がないかログを確認する)可能性があります。

    方言については、のみ MySQL5Dialectの違い またはMySQL5InnoDBDialect 後でENGINE=InnoDBを追加するということです DDLを生成するときにテーブルオブジェクトに。どちらか一方を使用しても、生成されたSQLは変更されません。



    1. SQLiteで一時テーブルを作成する

    2. SQLite JSON_TREE()

    3. SQLiteでのDate()関数のしくみ

    4. OracleDBで外部キーとそれらが参照するテーブルのリスト