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