ホームページ >データベース >mysql チュートリアル >Hibernate と MySQL を使用して Spring MVC アプリケーションで抽象スーパークラスの ID を生成するにはどうすればよいですか?

Hibernate と MySQL を使用して Spring MVC アプリケーションで抽象スーパークラスの ID を生成するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-09 20:34:02303ブラウズ

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

@GeneratedValue MySQL 上の多態性抽象スーパークラス

Hibernate と MySQL を使用する Spring MVC アプリケーションで抽象スーパークラスと @GeneratedValue を操作する場合、データベースの特定の要件と制限を考慮することが不可欠です。 「テーブル 'docbd.hibernate_sequences' は存在しません」というエラーは、シーケンスをネイティブにサポートしていない MySQL で GenerationType.TABLE が使用されている場合によく発生します。

問題の概要

この問題は、GenerationType.TABLE がシーケンス値を保存するために「hibernate_sequences」というテーブルを必要とするために発生します。 MySQL にはこのテーブルがないため、Hibernate はテーブルを作成しようとしますが、エラーが発生します。さらに、抽象スーパークラスで ID を管理する場合は、GenerationType.IDENTITY を使用することはできません。

ソリューション

GenerationType.TABLE と GenerationType.IDENTITY には制限がありますが、両方の問題に対処するソリューション。シーケンス テーブルや AUTO_INCREMENT に依存する代わりに、エンティティを保存する前に次の ID を手動で取得して設定すると、問題が解決します。このアプローチには次の手順が含まれます。

  1. 新しい ID を生成する別のサービス メソッドを作成します。
  2. このメソッド内で、保存されるエンティティに対応するテーブルから最大 ID 値を取得します。 .
  3. 事前定義された値によって最大 ID を増分します (例: 増加する場合は 1 または 100)。
  4. 生成された ID を返します。
  5. DAO クラスで、@GeneratedValue アノテーションをカスタム メソッド呼び出しに置き換えて、生成された ID を取得します。
  6. 生成された ID を設定しますエンティティを保存する前に、エンティティの setId() メソッドを使用して ID を取得します。

このアプローチでは、効果的に新しいデータが生成されます。シーケンスや AUTO_INCREMENT に依存しない ID。これにより、柔軟性が向上し、MySQL に存在しないシーケンスの問題が確実に解決されます。

以上がHibernate と MySQL を使用して Spring MVC アプリケーションで抽象スーパークラスの ID を生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。