【问题标题】:Hibernate putting backticks around columnDefinitionHibernate 在 columnDefinition 周围放置反引号
【发布时间】:2018-03-04 15:29:06
【问题描述】:

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

@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 附近使用的正确语法,

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

版本详情如下:

  • 休眠版本: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>

【问题讨论】:

  • 我找不到那些多余的字符。
  • 我明白了。我们将需要您的: MySQL 数据源配置(特别是如果配置了任何方言);确切的休眠版本; MySQL 版本。
  • 已更新问题描述中询问的信息。

标签: java hibernate


【解决方案1】:

请删除以下配置行:

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

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

更新:

这个问题终于通过把方言从通用 MySQL 改成 MySQL5 解决了:

org.hibernate.dialect.MySQL5Dialect

【讨论】:

  • 仍然面临同样的问题... columnDefinition 中有额外的反引号
  • 您可以尝试调整您的方言设置吗?您使用的是通用 MySQL。以下是可用方言的完整列表,包括 MySQL5 和 InnoDB / ISAM 的特定版本:docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/…
  • 将方言更改为 org.hibernate.dialect.MySQL5Dialect 后有效。感谢您的帮助。
  • 很高兴听到。我仍然有点惊讶,但至少问题已经消失了。
猜你喜欢
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多