Hibernate と MySQL を利用する Spring MVC アプリケーションでは、抽象スーパークラス BaseEntity のサブクラスを永続化しようとすることが観察されています。 、「テーブル 'docbd.hibernate_sequences' が存在しません」エラーが発生します。このエラーは、@GeneratedValue に GenerationType.TABLE が使用されていることと、MySQL 内でシーケンスがサポートされていないことが原因で発生します。
エンティティ ID を管理する抽象スーパークラスのため、GenerationType.IDENTITY の使用は実行できず、GenerationType.SEQUENCE はサポートされていない場合、この問題をどのように解決するかという問題が生じます。提供されているコード スニペットは、データ アクセス オブジェクト (DAO) 内の抽象スーパークラス (BaseEntity)、サブクラスの例 (CCD)、ドメイン固有言語 (DDL)、および 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 テーブル。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3