在休眠

时间:2018-06-10 12:24:09

标签: java mysql hibernate

考虑查询

INSERT INTO order (id, key, value) VALUES (?, ?, ?);

上述查询中存在MySQL语法错误,因为orderkey是MySQL中的关键字。所以解决方案是在查询中添加反引号。

INSERT INTO `order` (id, `key`, value) VALUES (?, ?, ?);

Hibernate足够愚蠢,不会自动执行此操作。根据{{​​3}},通过在hibernate配置文件中添加以下属性,可以解决表名的问题。

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

但这只会增加数据库名称和表名的反引号。列名仍然存在问题。

  

如何向所有列名称添加反引号?

  • Hibernate版本:3.6.10.Final
  • MySQL版本:5.7
  • hibernate.dialect:org.hibernate.dialect.MySQL5Dialect
  • JDK版本:1.8(如果与任何事情有关)

1 个答案:

答案 0 :(得分:0)

我找到了一种在hibernate中为列名添加反引号的方法。

  1. 相对于已映射的pojo文件打开xml文件(TableName.hbm.xml)。
  2. 找到相对列的属性。

    <property name="key" type="string">
        <column name="key" />
    </property>
    
  3. 使用方括号将列名称包围。

    <property name="key" type="string">
        <column name="[key]" />
    </property>
    
  4. 但这是一个艰苦的过程,因为您必须逐一为所有this answer对所有列执行此操作。最好的方法是避免添加MySQL keywords作为数据库,表或列名称。

    参考文献: