wake-up-neo.com

Ungültiger Syntaxfehler "type = MyISAM" in von Hibernate generierten DDL

Ich erhalte diesen Fehler für meinen Java-Code

   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

Dies ist die von hibernate übergebene Abfrage:

Hibernate: create table EMPLOYEE (emp_id integer not null, FNAME varchar(255), LNAME varchar(255), primary key (emp_id)) type=MyISAM

Ich habe mir alle Fragen zu diesem Fehler angesehen. Bei allen Fragen übergibt der Benutzer selbst die Abfrage "type = MyISAM", sodass er "type" in "engine" ändern kann. Hier ist der Ruhezustand jedoch für das Erstellen von Tabellen verantwortlich. Ich kann also nicht verstehen, wo der Fehler liegt und wie ich kann repariere es.

Dies ist meine Konfigurationsdatei:

<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>

Dies ist meine Zuordnungsdatei:

<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>

Dies ist meine Klassendatei:

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();

    }
}
25
yogesh meghnani

Das Problem ist, dass der Dialekt org.hibernate.dialect.MySQLDialect für MySQL 4.x oder früher ist. Das durch diesen Dialekt generierte Fragment TYPE=MYISAM wurde in MySQL 4.0 nicht mehr unterstützt und in 5.5 entfernt. 

Da Sie MariaDB verwenden, müssen Sie (abhängig von der Version von MariaDB und - möglicherweise - der Version von Hibernate) eine der folgenden Optionen verwenden:

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

Wenn Sie MySQL verwenden oder die obigen beiden Dialekte für MariaDB in Ihrer Version von Hibernate nicht vorhanden sind:

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

Es handelt sich um ein Problem mit Dialekt, anstelle von org.hibernate.dialect.MySQLDialect können Sie org.hibernate.dialect.MySQL5Dialect verwenden. Es wird glücklich funktionieren.

10
Brajesh

Da die Dialektänderung für mich nicht funktioniert, wenn ich die MySql-Datenbank verwende, __. Die einfachste Möglichkeit ist, die Standardversion des SQL-Connectors herunterzuladen und zu verwenden. Arbeitete absolut in Ordnung.

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

0
Vaibhav Jain