Hibernate使用名称转义创建表

时间:2016-07-24 09:32:17

标签: java mysql spring hibernate jpa

我有一个类似于以下内容的实体类:

@Entity
public class perm {

    @Id
    @GeneratedValue
    private Long id;

    private boolean add;

    // Getter & Setter are also there ...
}

当我开始使用spring(使用JPA hibernate)时,他为我的MySQL数据库生成以下CREATE TABLE语句:

create table perm (id bigint not null auto_increment, add bit not null, primary key (id))

此创建将失败,因为列名add未使用

进行转义
`
通常应该是这样的。
通常我会使用以下代码手动创建它:

create table perm (`id` bigint not null auto_increment, `add` bit not null, primary key (`id`))

当然,我可以创建一个ImprovedNamingStrategy,以便通过为它们设置前缀或后缀来操纵所有列名。但是所有我的列都有这种语法。

现在我的问题:
是否有一个jpaProperty可以转义列名,每次在sql语法中使用它?起初我想,当我设置

时,这已经完成了
jpaProperties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");`

但显然事实并非如此。也许还有其他的设置吗?

2 个答案:

答案 0 :(得分:2)

将@Column注释添加到字段中:

@Entity
public class perm {

    @Id
    @GeneratedValue
    private Long id;
    @Column(name="`add`")
    private boolean add;

    // Getter & Setter are also there ...
}

还要考虑为列使用更好的名称。这可能会在其他地方引起问题。

答案 1 :(得分:0)

add是Mysql中的保留关键字,您可以在此处看到https://dev.mysql.com/doc/refman/5.7/en/keywords.html

最好避免使用它。使用isAdded可能是另一种选择。

如果您无法更改列名,请使用此命令来指示Hibernate:

@Column(name="[add]")
private boolean add;