Java 表';DBNAME.hibernate_序列';不';不存在
我有一个使用SpringData/jpa的SpringBoot 2.0.1.RELEASE应用程序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.
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大文章:)