目次
Spring bootで複数@IDを設定したentityを作成
Spring bootで複数のプライマリーキーを持つテーブルを作成しました。そのままrunするとテーブルが作成されましたが、アプリを動かすとエラーが発生。生成されたテーブル構造を確認すると、entityにauto_increment設定をしていたカラムが、実際にはauto_incrementがついておらず、nullで登録できないよ!なエラーとなっていました。↓こんな感じのエンティティです。
複数プライマリーキーがある時のauto_increment設定方法
普通に修正しようと思ったら何度か怒られたのでメモです。一度、今ついているプライマリーキーを削除して、新しくプライマリーキーを貼り直す必要があります。
修正前のテーブル構造
mysql> show columns from testtable; +--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | 1st_id | bigint | NO | PRI | NULL | | | 2nd_id | bigint | NO | PRI | NULL | | | 3rd_id | bigint | NO | PRI | NULL | | | created_at | datetime(6) | YES | | NULL | | | updated_at | datetime(6) | YES | | NULL | | +--------------+-------------+------+-----+---------+-------+
1st_idがauto_incrementのはずなのですが、Extraに「auto_increment」の記載がないですね。。
1st_id, 2nd_id, 3rd_idの3カラムがprimary keyとなるテーブルです。
idにauto_incrementを付与する手順
こちらが実際の手順です。1st_id, 2nd_id, 3rd_idの3カラムがprimary keyとなるテーブルにおいて1st_idにauto_incrementを付与します。
# ①該当テーブルの既存primary keyをdrop mysql > ALTER TABLE testtable DROP PRIMARY KEY; # ②Primary keyにする複数カラムをprimary keyに設定。先頭のカラムがauto_incrementしたいものであること! mysql > ALTER TABLE testtable ADD CONSTRAINT PRIMARY KEY (1st_id, 2nd_id, 3rd_id); # ③auto_incrementするカラムの属性を変更 mysql > ALTER TABLE testtable CHANGE COLUMN 1st_id 1st_id bigint auto_increment;
特に注意する点が、②のprimary key設定の際のカラム並び順です。先頭に③でauto_incrementを設定したいカラムを書きます。
修正後のテーブル構造
mysql> show columns from testtable; +--------------+-------------+------+-----+---------+------------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+--------------+ | 1st_id | bigint | NO | PRI | NULL |auto_increment| | 2nd_id | bigint | NO | PRI | NULL | | | 3rd_id | bigint | NO | PRI | NULL | | | created_at | datetime(6) | YES | | NULL | | | updated_at | datetime(6) | YES | | NULL | | +------------+-------------+------+-----+---------+--------------+
無事idカラムにauto_incrementがつきました。これで完成です🎉
MySQL関連の他記事はこちら
UoPeople・プログラミング関連のつぶやきはこちら
コメント