首页 > 解决方案 > 在 Hibernate 中将列名用双引号括起来

问题描述

我使用 Spring JPA 2.0.9 和 Hibernate 5.3.5 和这种方言通过 JDBC 使用从这个发行版获取的官方 JDBC 驱动程序访问 FileMaker (v16) 数据库。

问题是生成的 SQL 最终以列名为前缀,并以相应的表名为前缀,例如:

select 
marketingc0_.a__IDPK_MarketingCategory as a__IDPK_1_0_0_, marketingc0_.Active as Active2_0_0_
from MarketingCategories as marketingc0_
where marketingc0_.a__IDPK_MarketingCategory=1

FileMaker 不接受抱怨语法错误的内容:

[08007][27034] [FileMaker][FileMaker JDBC] FQL0001/(1:153):查询的语法有错误。

但是,如果列名用双引号括起来,它会毫无怨言地吞下 SQL,如下所示:

select
    marketingc0_."a__IDPK_MarketingCategory" as a__IDPK_1_0_0_, marketingc0_."Active" as Active2_0_0_
    from MarketingCategories as marketingc0_
    where marketingc0_.a__IDPK_MarketingCategory=1

我想出的解决方案是将这些引号包含到实体注释中:

public class MarketingCategory {
    @Id
    @Column(name = "\"a__IDPK_MarketingCategory\"")
    private Integer id;

    @Column(name = "\"a_ID_User\"")
    private Integer userId;

    @Column(name = "\"Active\"")
    private Boolean active;

...
}

这看起来不太好。

是否可以配置 Hibernate 使其自动将所有列名用双引号括起来?

标签: javahibernatespring-data-jpafilemaker

解决方案


您可以在定义中设置一个名为hibernate.globally_quoted_identifiersto的属性true,它将引用所有标识符。除了不引用列之外,还有一个选项,但没有仅引用列的选项。


推荐阅读