発生現象
Java(Spring Boot)DBエンティティを作成した際に発生したエラーです。
起動時に発生します。
Caused by: org.hibernate.MappingException: Could not instantiate id generator [entity-name=com.example.demo.entities.TodoItem]
at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:124) ~[hibernate-core-5.4.27.Final.jar:5.4.27.Final]
---中略
Caused by: org.hibernate.MappingException: The increment size of the [xxxx_id_seq] sequence is set to [50] in the entity mapping while the associated database sequence increment size is [1].
at org.hibernate.id.enhanced.SequenceStyleGenerator.configure(SequenceStyleGenerator.java:261) ~[hibernate-core-5.4.27.Final.jar:5.4.27.Final]
at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:118) ~[hibernate-core-5.4.27.Final.jar:5.4.27.Final]
... 38 common frames omitted
The increment size of the [xxxx_id_seq] sequence is set to [50] in the entity mapping while the associated database sequence increment size is [1].
[xxxx_id_seq]シーケンスの増分サイズはエンティティマッピングで[50]に設定され、関連するデータベースシーケンスの増分サイズは[1]です。
@SequenceGeneratorのデフォルトは50だけど、DBで設定されてるシーケンスの増分は1だよ!というエラーですね。
解決方法
1ずつ増やすように@SequenceGeneratorに増分を指定しましょう。
(50ずつ増えるってどんなデフォルトなんだろう。
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name = "items")
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "xxxx_id_seq")
//@SequenceGenerator(name = "xxxx_id_seq", sequenceName = "todoitems_id_seq")
@SequenceGenerator(name = "xxxx_id_seq", sequenceName = "todoitems_id_seq", allocationSize = 1) // ★allocationSize = 1を追加
private Long id;
参考
[HHH-13674] - Hibernate JIRA
コメント