Table 'DBNAME.hibernate_sequence' doesn't exist

前端 未结 5 1359
离开以前
离开以前 2020-12-29 17:45

I have a SpringBoot 2.0.1.RELEASE application using spring data / jpa


    org.sprin         


        
相关标签:
5条回答
  • 2020-12-29 18:09

    If you are using Hibernate version prior to Hibernate5 @GeneratedValue(strategy = GenerationType.IDENTITY) works like a charm. But post Hibernate5 the following fix is necessary.

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO,generator="native")
    @GenericGenerator(name = "native",strategy = "native")
    private Long id;
    

    DDL

    `id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY
    

    REASON

    Excerpt from hibernate-issue

    Currently, if the hibernate.id.new_generator_mappings is set to false, @GeneratedValue(strategy = GenerationType.AUTO) is mapped to native. If this property is true (which is the defult value in 5.x), the @GeneratedValue(strategy = GenerationType.AUTO) is always mapped to SequenceStyleGenerator.

    For this reason, on any database that does not support sequences natively (e.g. MySQL) we are going to use the TABLE generator instead of IDENTITY.

    However, TABLE generator, although more portable, uses a separate transaction every time a value is being fetched from the database. In fact, even if the IDENTITY disables JDBC batch updates and the TABLE generator uses the pooled optimizer, the IDENTITY still scales better.

    0 讨论(0)
  • 2020-12-29 18:13

    With the generation GenerationType.AUTO hibernate will look for the default hibernate_sequence table , so change generation to IDENTITY as below :

     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
    
    0 讨论(0)
  • 2020-12-29 18:15

    Add the following config in your application.yml:

    spring: jpa: hibernate: use-new-id-generator-mappings: false

    Or this if you use application.properties

    spring.jpa.hibernate.use-new-id-generator-mappings= false

    0 讨论(0)
  • 2020-12-29 18:22

    Just in case you migrate from a previous boot version:

    setting the following in your application.yml will prevent hibernate from looking for hibernate_sequence entries.

    spring.jpa.hibernate.use-new-id-generator-mappings
    

    That was the default in Boot 1.x

    0 讨论(0)
  • 2020-12-29 18:30

    JPA and Auto-DDL

    When I run into mapping mismatches between a table schema and a java entity I like to do the following.

    1. Drop the schema
    2. Add the spring.jpa.hibernate.ddl-auto=create property to application.properties
    3. Restart your application

    This will now recreate the schema based on your entity. You can then compare the created table against your old schema to see the difference, if necessary.

    Warning : This will truncate the data in all tables specified as entities in your application

    0 讨论(0)
提交回复
热议问题