Java 表';DBNAME.hibernate_序列';不';不存在

Java 表';DBNAME.hibernate_序列';不';不存在,java,mysql,spring,spring-boot,spring-data,Java,Mysql,Spring,Spring Boot,Spring Data,我有一个使用SpringData/jpa的SpringBoot 2.0.1.RELEASE应用程序 org.springframework.boot spring引导启动器数据jpa 但当我在Amazon Aurora DB中进行更新时,我得到了以下错误: 2018-04-13 09:20[pool-1-thread-1]错误o.h.id.enhanced.TableStructure.execute(148)-无法读取hi值 com.mysql.jdbc.exceptions.jdbc4.

我有一个使用SpringData/jpa的SpringBoot 2.0.1.RELEASE应用程序


org.springframework.boot
spring引导启动器数据jpa
但当我在Amazon Aurora DB中进行更新时,我得到了以下错误:

2018-04-13 09:20[pool-1-thread-1]错误o.h.id.enhanced.TableStructure.execute(148)-无法读取hi值 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)中不存在表'elbar.hibernate_sequence'

我想保存的实体中有这个

@Id
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;

我还希望避免DB在获取ID时出现任何缺陷。

使用generation
GenerationType。AUTO
hibernate将查找默认的
hibernate\u序列
表,因此将generation更改为
IDENTITY
,如下所示:

 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Long id;

以防您从以前的启动版本迁移:

应用程序.yml中设置以下内容将阻止hibernate查找
hibernate\u序列
条目

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

这是Boot 1.x中的默认设置,请在application.yml中添加以下配置:

spring:
jpa:
冬眠:
使用新的id生成器映射:false

或者,如果使用application.properties

spring.jpa.hibernate。使用新的id生成器映射=false

jpa和自动DDL 当我遇到表模式和java实体之间的映射不匹配时,我喜欢执行以下操作

  • 删除模式
  • spring.jpa.hibernate.ddl auto=create
    属性添加到application.properties
  • 重新启动应用程序
  • 这将基于您的实体重新创建模式。然后,如果需要,可以将创建的表与旧模式进行比较,以查看差异

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO,generator="native")
    @GenericGenerator(name = "native",strategy = "native")
    private Long id;
    
    警告:这将截断应用程序中指定为实体的所有表中的数据


    如果您使用的是Hibernate之前的Hibernate版本5
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    非常有效。但在休眠后5需要进行以下修复

    @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
    
    原因

    摘自

    当前,如果hibernate.id.new_生成器_映射设置为false, @GeneratedValue(strategy=GenerationType.AUTO)映射到本机。 如果此属性为true(即5.x中的defult值),则 @GeneratedValue(策略=GenerationType.AUTO)始终映射到 序列样式生成器

    因此,在任何不支持序列的数据库上 在本地(例如MySQL),我们将使用表生成器 身份认同

    然而,表生成器虽然更便携,但使用单独的 每次从数据库中提取值时的事务。在里面 事实上,即使标识禁用了JDBC批处理更新和表 生成器使用池式优化器,身份仍然可以更好地扩展


    清楚地解释了Hibernate3和5个主要版本在处理GenerationType方面的变化。AUTO@SudhirRthnx大文章:)