0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Enumeratedなカラムで、新しいEnumを追加したら制約違反

Posted at

全体概要

Spring Data JPA、Hibernateを使用したJavaアプリケーションで開発を行っています。
あるEntityはvalue objectとしてenum型フィールドを持っています。

エラー概要

@Enumerated(EnumType.STRING)なフィールドを持つEntityがありました。このアノテーションは、enumクラスをフィールドとするEntityを作成する際に使うアノテーションです。
いまフィールドに対し、新しいenum定数を定義したところ、INSERT実行時に以下のようなエラーを踏み、少しハマってしまいました。

Check constraint violation: "CONSTRAINT_30: "; SQL statement:
(SQL省略) [23513-220]

could not execute statement [制約違反を確認してください: "CONSTRAINT_30: "
Check constraint violation: "CONSTRAINT_30: "; SQL statement:
省略
org.springframework.dao.DataIntegrityViolationException: could not execute statement [制約違反を確認してください: "CONSTRAINT_30: "
Check constraint violation: "CONSTRAINT_30: "; SQL statement:
(SQL省略) [23513-220]] [(SQL省略))]; SQL [(SQL省略)]; constraint ["CONSTRAINT_30: "; SQL statement:
(SQL省略)[23513-220]]
	at app//org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:269)
	at app//org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:229)

既存enumでは問題なく、追加したenumでのみ発生しました。
またColumnアノテーションでlengthを伸ばしても発生し、一意制約違反となるSQLは発行していませんでした。

解決

私の場合、application.propertiesのspring.jpa.hibernate.ddl-autoの設定ミスでした。
どうやらHibernateの上記設定値がupdateの場合、スキーマが更新されず、新規追加したenumの値がenum型カラムとして許容されない値が入ったと怒られるようです。
パラメータの設定値をcreateに変更し、ビルドしなおすことで解消しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?