hibernate.hbm2ddl.auto不会将序列链接到id列

时间:2018-05-07 15:38:16

标签: sql hibernate h2

问题

为什么我执行NULL not allowed for column "ID"时出现INSERT INTO PUBLIC.MY_ENTITY (name) VALUES ('test name');异常?

设置

我使用的是Spring Boot和Hibernate。 Spring Boot启动时带有属性:

hibernate.hbm2ddl.auto=update
spring.jpa.hibernate.ddl-auto=update

我有实体:

@Entity
@Table(name = "MY_ENTITY")
public class MyEntity {

    @Id
    @SequenceGenerator(sequenceName = "MY_ENTITY_SEQ", name = "MyEntitySeq")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MyEntitySeq")
    private Long id;

    @Column(unique = true, nullable = false)
    private String name;

    // getters & setters
    // ...
}

表已在应用程序启动时生成。

我可以证明已经使用下一个查询创建了序列:

SELECT * FROM INFORMATION_SCHEMA.SEQUENCES WHERE SEQUENCE_NAME = 'MY_ENTITY_SEQ'

P.S。

由于某种原因,Hibernate没有将序列链接到id自动生成。我可以通过下面的查询解决问题。 但是如何让Hibernate生成下面的查询?

ALTER TABLE PUBLIC.MY_ENTITY ALTER COLUMN ID BIGINT DEFAULT (NEXT VALUE FOR PUBLIC.MY_ENTITY_SEQ) NOT NULL NULL_TO_DEFAULT SEQUENCE PUBLIC.MY_ENTITY_SEQ;
INSERT INTO PUBLIC.MY_ENTITY (name) VALUES ('test name');

1 个答案:

答案 0 :(得分:0)

  • 为@SequenceGenerator提供allocationSize:@SequenceGenerator(sequenceName = "MY_ENTITY_SEQ", name = "MyEntitySeq", allocationSize=1)
  • 检查您正在使用的方言
  • 将“hibernate.id.new_generator_mappings”设置为“true”