@GeneratedValue MySQL 上の多態性抽象スーパークラス
Hibernate と MySQL を使用する Spring MVC アプリケーションで @GeneratedValue を使用すると問題が発生する可能性があります。抽象スーパークラスとそれを拡張するサブクラス。ここで、問題と解決策を詳しく見ていきます。
問題
MySQL で抽象スーパークラス BaseEntity のサブクラスを保存するときに、非対応に関するエラーが発生する場合があります。 hibernate_sequences テーブルの存在。これは、MySQL がシーケンスをサポートしておらず、GenerationType.TABLE (@GeneratedValue のデフォルト値) でシーケンスの使用が必要なために発生します。
解決策
これを克服するには元の質問の 2 番目の編集で JBNizet が提案しているように、MySQL に hibernate_sequences というテーブルを作成する必要があります。ただし、テーブルを作成した後でも、次の別のエラーが発生する可能性があります。「'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 はシームレスに動作し、保存できるようになります。 「不明な列 'sequence_name'」エラーが発生することなく、BaseEntity のサブクラスを作成できます。
以上がMySQL で多態性抽象スーパークラスで @GeneratedValue を使用するときに発生する「不明な列 'sequence_name'」エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。