web-dev-qa-db-ja.com

Hibernateによって生成されたDDLの無効な構文エラー「type = MyISAM」

Javaコードでこのエラーが発生しています

   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

このエラーに関連するすべての質問を見てきました。しかし、これらすべての質問では、ユーザー自身がクエリ「type = MyISAM」を渡しているため、「type」を「engine」に変更できますが、ここではhibernateがテーブルの作成を担当しているため、間違いがどこにあるのか、どうすれば修正できるのか理解できない。

これは私の設定ファイルです:

<hibernate-configuration>
 <session-factory >
 <property name="hibernate.hbm2ddl.auto">create</property>
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="hibernate.connection.url">jdbc:mysql://localhost/servletcheck</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.connection.password"> </property>
  <property name="hibernate.dialect"> org.hibernate.dialect.MySQLDialect</property>
  <property name="hibernate.show_sql">true</property>
  <mapping resource="Employee.hbm.xml"/>
 </session-factory>
</hibernate-configuration>

これは私のマッピングファイルです。

<hibernate-mapping>
    <class name="first.Employee" table="EMPLOYEE">
        <id name="id" type="int">
            <column name="emp_id" />
            <generator class="assigned" />
        </id>
        <property name="fname" type="Java.lang.String">
            <column name="FNAME" />
        </property>
        <property name="lname" type="Java.lang.String">
            <column name="LNAME" />
        </property>
    </class>
</hibernate-mapping>

これは私のクラスファイルです。

public class StoreData {
    public static void main(String[] args) {
        Configuration cfg=new Configuration();
        cfg.configure("hibernate.cfg.xml");
        SessionFactory factory=cfg.buildSessionFactory();
        Session session=factory.openSession();
        org.hibernate.Transaction t=session.beginTransaction();
        Employee e=new Employee();
        e.setId(1);
        e.setFname("yogesh");
        e.setLname("Meghnani");
        session.persist(e);
        t.commit();

    }
}
29
yogesh meghnani

問題は、方言org.hibernate.dialect.MySQLDialectがMySQL 4.x以前用であることです。この方言によって生成されるTYPE=MYISAMフラグメントは、MySQL 4.0で非推奨になり、5.5で削除されました。

MariaDBを使用する場合、(MariaDBのバージョンと、場合によってはHibernateのバージョンに応じて)次のいずれかを使用する必要があります。

  • org.hibernate.dialect.MariaDBDialect
  • org.hibernate.dialect.MariaDB53Dialect

MySQLを使用している場合、またはMariaDBの上記2つの方言がHibernateのバージョンに存在しない場合:

  • org.hibernate.dialect.MySQL5Dialect
  • org.hibernate.dialect.MySQL55Dialect
  • org.hibernate.dialect.MySQL57Dialect
97
Mark Rotteveel

org.hibernate.dialect.MySQLDialectの代わりに、方言に関連する問題で、org.hibernate.dialect.MySQL5Dialectを使用できます。それはうまくいきます。

14
Brajesh

MySqlデータベースを使用しているときに方言の変更が機能しないため。最も簡単な方法は、SQLコネクタの標準バージョンをダウンロードして使用することです。絶対にうまくいきました。

http://www.Java2s.com/Code/Jar/m/Downloadmysqlconnectorjar.htm

0
Vaibhav Jain