关于hibernate在数据库中生成hibernate_sequence表时报错的解决方案

在mysql数据库中,使用hibernate自动生成数据表的同时,数据库会自动生成hibernate_sequence表

如果删除该表,就会报:could not read a hi value - you need to populate the table: hibernate_sequence


解决办法:

发现我的表里面使用的主键生成策略的方式为:@GeneratedValue(strategy = GenerationType.AUTO)

只要把它修改成:@GeneratedValue(strategy = GenerationType.IDENTITY),

就不会报错了。

分析:

1.使用@GeneratedValue(strategy = GenerationType.AUTO)的时候,实际上是把主键生成策略交给持久化引擎,

持久化引擎会根据数据库自GenerationType.TABLE,GenerationType.SEQUENCE,GenerationType.IDENTITY    中去找一种主键生成策略,也可以直接写成@GeneratedValue,如果数据库现在的是table或者是sequence,而非indentity时,就会报上面的错误;

2.使用@GeneratedValue(strategy = GenerationType.IDENTITY)的时候,数据库指定了生成策略就是主键自动增长。


你可能感兴趣的:(hibernate)