Table 'access_log.hibernate_sequence' doesn't exist

注意:我的项目环境是spring-boot + spring-data-jpa + mysql , 如果你使用的是oracle数据库,则不要使用此方法,直接增加一个名字hibernate_sequence的sequence就好了 !!!

一. 问题描述
  1. 项目使用Spring-data-JPA , 使用的msyql数据库(主键是自增autoincrement),实体类中的主键使用的是@GeneratedValue(strategy = GenerationType.AUTO) ,预期效果应该是不报错的,结果在运行中报了异常。
  2. 实体id注解
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
二. 部分异常错误如下:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'access_log.hibernate_sequence' doesn't exist
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_121]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_121]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_121]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_121]
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.Util.getInstance(Util.java:408) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1966) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) ~[HikariCP-2.7.8.jar:na]
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) ~[HikariCP-2.7.8.jar:na]
三. 原因分析
  1. 实体类使用了@GeneratedValue(strategy = GenerationType.AUTO)注解,以上异常在mysql中是不应该出现的,如果是在oracle 则正常。
  2. 原因是我的项目中升级了spring-boot ,原来是1.x升级到了2.x , jpa 中的hibernate也跟着从4.x升级到了5.x , 其中有一个默认配置在hibernate4中是hibernate.id.new_generator_mappings=false 。在hibernate5中是hibernate.id.new_generator_mappings=true , 所要做的就是把这个配置改成false就好了。
四. 解决方法
  1. 在spring-boot中配置如下
spring:
  jpa:
    hibernate:
      use-new-id-generator-mappings: false

参考:

    原文作者:else05
    原文地址: https://www.jianshu.com/p/26f32b6d99a5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞