美文网首页
Table 'access_log.hibernate_

Table 'access_log.hibernate_

作者: else05 | 来源:发表于2018-05-03 10:14 被阅读341次

    注意:我的项目环境是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
    

    参考:

    相关文章

      网友评论

          本文标题:Table 'access_log.hibernate_

          本文链接:https://www.haomeiwen.com/subject/pbckrftx.html