首页  >  文章  >  数据库  >  如何解决在 MySQL 的多态抽象超类上使用 @GenerateValue 时出现的'未知列 'sequence_name'”错误?

如何解决在 MySQL 的多态抽象超类上使用 @GenerateValue 时出现的'未知列 'sequence_name'”错误?

Barbara Streisand
Barbara Streisand原创
2024-11-22 07:09:14995浏览

How to Resolve

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn