java - 在 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 使其自动将所有列名用双引号括起来?
解决方案
您可以在定义中设置一个名为hibernate.globally_quoted_identifiers
to的属性true
,它将引用所有标识符。除了不引用列之外,还有一个选项,但没有仅引用列的选项。
推荐阅读
- .net - 限制从我的应用服务发送到 appinsight 的日志消息
- .net - .NET 将用户组添加到现有声明
- javascript - 提交表单后PHP保持复选框选中?
- rust - 如何在将调试信息添加到可执行文件时使货物进入stdlib源文件的正确路径
- .net-core - BOT 框架主动消息不起作用
- java - 如何设置像 WhatsApp 语音笔记(recyclerview)这样的媒体播放器?
- django - 如何配置 django 以使用 Google Cloud CDN 为媒体文件生成签名 url?
- mongodb - MongoDB中文档引用关系的Mongoose实现
- kendo-ui - 在剑道网格过滤器选项中加载大量数据
- javascript - 当只有一页时想要动态隐藏信息