Hibernate在columnDefinition周围添加反引号

时间:2016-01-25 11:38:42

标签: java hibernate

我在数据库中有一个列,它在实体类中定义如下:

@Column(name="lastlogindate", columnDefinition ="TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
private Timestamp lastlogindate;

正在生成的create table命令如下:

create table usermaster (
  lastlogindate `TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP`)

虽然有效但

create table usermaster (
  lastlogindate TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)

Hibernate在创建表时报告以下错误:

  

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在“TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

附近使用正确的语法

无法理解为什么要添加额外的滴答以及如何避免它。

版本详情如下:

  • HIBERNATE VERSION:4.3.8.Final
  • MySQL版本:5.6.26
  • MySQL方言信息:
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="transaction.factory_class">
    org.hibernate.transaction.JDBCTransactionFactory</property>
    <property name="current_session_context_class">thread</property>
    <property name="show_sql">true</property>
    <property name="hibernate.connection.autocommit ">false</property>
    <property name="hibernate.globally_quoted_identifiers">true</property>

1 个答案:

答案 0 :(得分:2)

请删除以下配置行:

<property name="hibernate.globally_quoted_identifiers">true</property>

这可能不需要,几乎肯定会导致您遇到的问题。

<强>更新

最终通过将MySQL的方言改为MySQL5来解决这个问题:

org.hibernate.dialect.MySQL5Dialect