写测试类,向数据库保存一条数据时,出现了“ Table 'XXX.hibernate_sequence' doesn't exist”的错误
经查,是由于使用 @GeneratedValue 注解时,没有指定生成策略。
改为 @GenerationValue(strategy = GenerationType.IDENTITY)即可。
猜测:
GenerationType为枚举类型,包括了TABLE, SEQUENCE, IDENTITY 和 AUTO.
若没有指定,默认为AUTO,即持久化引擎自主选择前三种生成方式的其中一种。可能是选择错误。
结论:
使用@GenerationValue注解时,最好显式地指定生成策略,避免错误的发生。
此种主键生成策略就是通常所说的主键自增长,数据库在插入数据时,会自动给主键赋值,比如MYSQL可以在创建表时声明"auto_increment" 来指定主键自增长。该策略在大部分数据库中都提供了支持(指定方法或关键字可能不同),但还是有少数数据库不支持,所以可移植性略差。

参考链接:
1740

被折叠的 条评论
为什么被折叠?



