首页 >数据库 >mysql教程 >如何使用 Hibernate 和 MySQL 为 Spring MVC 应用程序中的抽象超类生成 ID?

如何使用 Hibernate 和 MySQL 为 Spring MVC 应用程序中的抽象超类生成 ID?

Patricia Arquette
Patricia Arquette原创
2024-11-09 20:34:02304浏览

How to Generate IDs for Abstract Superclasses in Spring MVC Applications using Hibernate and MySQL?

MySQL 上的 @GenerateValue 多态抽象超类

当使用 Hibernate 和 MySQL 在 Spring MVC 应用程序中使用抽象超类和 @GenerateValue 时,它​​是必须考虑数据库的具体要求和限制。当 GenerationType.TABLE 与 MySQL 一起使用时,经常出现“Table 'docbd.hibernate_sequences'不存在”的错误,MySQL 本身不支持序列。

问题概述

出现此问题的原因是 GenerationType.TABLE 需要一个名为“hibernate_sequences”的表来存储序列值。由于 MySQL 没有该表,Hibernate 尝试创建它,从而导致错误。此外,在抽象超类中管理 ID 时,使用 GenerationType.IDENTITY 是不可行的。

解决方案

尽管 GenerationType.TABLE 和 GenerationType.IDENTITY 有限制,但有一个解决这两个问题的解决方案。不依赖序列表或 AUTO_INCRMENT,而是在保存实体之前手动检索下一个 ID 并设置它来解决问题。此方法涉及以下步骤:

  1. 创建一个单独的服务方法来生成新 ID。
  2. 在此方法内,从与要保存的实体对应的表中检索最大 ID 值.
  3. 将最大 ID 增加预定义值(例如,1 或 100 以增加并发性)。
  4. 返回生成的 ID。
  5. 在您的 DAO 类中,替换@GenerateValue 注释,使用自定义方法调用来检索生成的 ID。
  6. 在保存实体之前使用 setId() 方法设置此生成的 ID。

此方法有效地生成不依赖序列或 AUTO_INCRMENT 的新 ID。它提供了更大的灵活性,并确保解决 MySQL 中不存在序列的问题。

以上是如何使用 Hibernate 和 MySQL 为 Spring MVC 应用程序中的抽象超类生成 ID?的详细内容。更多信息请关注PHP中文网其他相关文章!

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