MySQL 上的 @GenerateValue 多态抽象超类
在使用 Hibernate 和 MySQL 的 Spring MVC 应用程序中,在使用 @GenerateValue 时可能会遇到问题具有扩展它的子类的抽象超类。下面是对问题和解决方案的详细分析。
问题
在 MySQL 中保存抽象超类 BaseEntity 的子类时,您可能会收到有关非以下内容的错误: hibernate_sequences 表是否存在。出现这种情况是因为 MySQL 不支持序列,而 GenerationType.TABLE(@GenerateValue 的默认值)需要使用序列。
解决方案
克服这个问题问题,您需要在 MySQL 中创建一个名为 hibernate_sequences 的表,正如 JBNizet 在原始问题的第二次编辑中所建议的那样。但是,即使在创建表之后,您也可能会遇到另一个错误:“'where 子句'中的未知列'sequence_name'”。
要解决此问题,请修改 Hibernate 生成的 SELECT 语句以正确指定sequence_name:
Hibernate: select sequence_next_hi_value from hibernate_sequences where sequence_name = 'BaseEntity' for update
将语句更改为:
Hibernate: select sequence_next_hi_value from hibernate_sequences where sequence_names = 'BASE_ENTITY' for update
确保序列名称为在 SELECT 语句中大写,它应该与您在创建表(create table ... 语句)期间指定的序列名称匹配。
一旦序列名称正确,Hibernate SQL 应该无缝工作,允许您保存BaseEntity 的子类,不会遇到“未知列 'sequence_name'” 错误。
以上是如何解决在 MySQL 的多态抽象超类上使用 @GenerateValue 时出现的'未知列 'sequence_name'”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!