Java Hibernate使用MySQL生成无效的SQL查询

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

我有以下JPA实体类(示例案例)。一所房子只属于一条街。一条街上有许多房子

@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");