Java Hibernate使用MySQL生成无效的SQL查询
我有以下JPA实体类(示例案例)。一所房子只属于一条街。一条街上有许多房子Java Hibernate使用MySQL生成无效的SQL查询,java,hibernate,orm,jpa,Java,Hibernate,Orm,Jpa,我有以下JPA实体类(示例案例)。一所房子只属于一条街。一条街上有许多房子 @Entity public class House { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) public Integer id; public String name @ManyToOne public Street street; } @Entity public class Stre
@Entity
public class House {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Integer id;
public String name
@ManyToOne
public Street street;
}
@Entity
public class Street {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Integer id;
@OneToMany(mappedBy="street")
public Set<House> houses;
}
Hibernate/JPA生成以下SQL查询:
insert into Street default values
这是MySQL不喜欢的
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'default values' at line 1
你知道为什么吗?我正在使用Java6、MySQL 5.0.67和Hibernate的JPA实现(版本3.2.1.ga)
[1] EJB3在操作页面318-319中标准SQL为插入指定了此可选语法:
INSERT INTO <Table Name> DEFAULT VALUES
您还可以通过将名为
hibernate.properties
的文件放置在类路径的根目录中来指定属性。如果SQL语句中没有错误,则可能需要检查表列名,因为它可以包含Mysql使用的预定义名称;例如,不能用作表列名的“column”另一种可能出现此异常的情况是将保留字用作表的列。例如,“to”和“from”不是MySQL的合适名称。显然,Hibernate中存在一个bug,它不检查这些列,而且即使未创建表也能正常工作。确保spring.jpa.database platform=org.Hibernate.dialent.mysql5dialent具有正确版本的MySQL我使用了“key”和“value”作为列名。呜呜,这真是一个很大的暗示。
INSERT INTO <Table Name> DEFAULT VALUES
INSERT INTO <Table Name> () VALUES ()
INSERT INTO <Table Name> (col1, col2, col3) VALUES (DEFAULT, DEFAULT, DEFAULT)
import org.hibernate.cfg.Configuration;
Configuration cfg = new Configuration();
cfg.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect");