Hibernate によって生成された DDL での無効な構文エラー "type= MyISAM"
質問:
Hibernate を使用して MySQL にテーブルを作成しようとすると、次のような問題が発生しました。エラー:
Caused by :`com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException`: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB` server version for the right syntax to use near 'type = `MyISAM`' at line 1
このエラーは Hibernate によって生成されたクエリで発生します:
Hibernate: create table EMPLOYEE (emp_id integer not null, FNAME varchar(255), LNAME varchar(255), primary key (emp_id)) type=MyISAM
同様のエラーを検索しましたが、通常、ユーザーがクエリを手動で渡すときにこの問題が発生することがわかりました。ここでは、Hibernate がテーブル作成クエリを生成しています。間違いはどこで見つけられ、どうすれば解決できますか?
回答:
このエラーは、構成で使用されている方言が古いために発生します。 Hibernate 5.x 以前では、MySQL 4.x 以前に org.hibernate.dialect.MySQLDialect が使用されていました。この方言によって生成される「TYPE=MYISAM」フラグメントは、MySQL 4.0 で非推奨となり、5.5 で削除されました。
この問題を解決するには、Hibernate 設定で方言を更新する必要があります。 MariaDB を使用している場合は、そのバージョンと Hibernate バージョンに応じて、次のいずれかを使用できます。方言:
MySQL を使用している場合、または上記の MariaDB ダイアレクトが Hibernate バージョンに存在しない場合は、次のいずれかを使用できます。方言:
注: Hibernate 6 では、接続されたバージョンに基づいて Hibernate 6 ダイアレクトが自己構成されるため、MySQLDialect または MariaDBDialect を再度使用できます。
以上がMySQL テーブルの作成時に、Hibernate が「type=MyISAM」で「無効な構文エラー」を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。