【发布时间】:2017-09-28 16:32:35
【问题描述】:
我的 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();
}
}
【问题讨论】:
-
请再次阅读问题...我几乎已经阅读了所有与之相关的问题..您也链接了那个问题,但我没有任何解决方案。在所有这些问题中,他们都在传递 sql 查询但在这里我使用休眠来创建表。
-
@JarrodRoberson 这个问题不是链接问题的重复,因为这里的问题是由 Hibernate 方言生成的专门 DDL,而不是一般问题。
-
@ScaryWombat - 它不是“完全复制”。 OP 知道
TYPE是问题所在,但“重复”并没有说明如何为hibernate解决它。所以,我在此不再重复这个问题。并将 Mark's Accepted Answer 保留为一个好的答案。
标签: java mysql hibernate mariadb