Hibernate と MySQL を利用する Spring MVC アプリケーションでは、抽象スーパークラス BaseEntity のサブクラスを永続化しようとすることが観察されています。 、「テーブル 'docbd.hibernate_sequences' が存在しません」エラーが発生します。このエラーは、@GeneratedValue に GenerationType.TABLE が使用されていることと、MySQL 内でシーケンスがサポートされていないことが原因で発生します。
エンティティ ID を管理する抽象スーパークラスのため、GenerationType.IDENTITY の使用は実行できず、GenerationType.SEQUENCE はサポートされていない場合、この問題をどのように解決するかという問題が生じます。提供されているコード スニペットは、抽象スーパークラス (BaseEntity)、サブクラスの例 (CCD)、ドメイン固有言語 (DDL)、およびデータ アクセス オブジェクト (DAO) 内の JPQL コードを示しています。
使用される継承戦略は InheritanceType です。 .TABLE_PER_CLASS、サブクラスごとに個別のテーブルを示します。 MySQL がシーケンスを使用できないことを考慮すると、GenerationType.TABLE を使用する代替案は必然的に hibernate_sequences テーブルの欠如につながります。
投稿者は、交換可能なManyToOne関係の必要性を挙げて、@MappedSuperClassの使用は実行可能な選択肢ではないと主張しています。 。たとえば、AccessLog には Actor_entity と target_entity が含まれており、どちらも BaseEntity から継承しています。このシナリオでは、@MappedSuperClass を使用すると、AccessLog が BaseEntity を見つけられないことを示すエラーが発生します。
問題を解決するために、提案に従って hibernate_sequences テーブルが作成されました。ただし、新しいエラーが発生しました: 「'where 句' に不明な列 'sequence_name' があります。」 このエラーは、Hibernate によって開始された SQL クエリを指します: 「select sequence_next_hi_value from hibernate_sequences where sequence_name = 'BaseEntity' for update.」
この特定のエラーに対処するには、投稿者は、 hibernate_sequences テーブル。
以上がMySQL で多態性抽象スーパークラスで @GeneratedValue GenerationType.TABLE を使用するときに発生する「Unknown columns 'sequence_name' in 'where quote'」エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。