如何在 JPA 中映射名称为保留字的实体字段

2022-08-31 09:49:20
@Column(name="open")

使用具有休眠状态的 sqlserver 方言。

[SchemaUpdate] Unsuccessful: create table auth_session (id numeric(19,0) identity not null, active tinyint null, creation_date datetime not null, last_modified datetime not null, maxidle int null, maxlive int null, open tinyint null, sessionid varchar(255) not null, user_id numeric(19,0) not null, primary key (id), unique (sessionid))
[SchemaUpdate] Incorrect syntax near the keyword 'open'.

我本来希望休眠在创建表时使用带引号的标识符。

关于如何处理这个问题的任何想法...除了重命名字段之外?


答案 1

使用Hibernate作为JPA 1.0提供程序,您可以通过将保留关键字括在反引号中来转义它:

@Column(name="`open`")

这是从Hiberate Core继承的语法:

5.4.SQL 带引号的标识符

您可以通过在映射文档中将表名或列名括在反引号中来强制 Hibernate 在生成的 SQL 中对标识符进行引号引用。休眠将对 SQL 方言使用正确的引用样式。这通常是双引号,但SQL Server使用括号,MySQL使用反引号。

<class name="LineItem" table="`Line Item`">
    <id name="id" column="`Item Id`"/><generator class="assigned"/></id>
    <property name="itemNumber" column="`Item #`"/>
    ...
</class>

在 JPA 2.0 中,语法是标准化的,并变为:

@Column(name="\"open\"")

引用

相关问题


答案 2

有同样的问题,但有一个名为 的表名。如果设置Transaction

hibernate.globally_quoted_identifiers=true

然后,所有数据库标识符都将被引用。

在这里找到我的答案 表名中的特殊字符休眠给出错误

并在此处找到所有可用设置 https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/appendices/Configurations.html

虽然找不到更好的文档。

在我的情况下,设置在我的Spring属性文件中。如注释中所述,它也可能位于其他与休眠相关的配置文件中。


推荐