admin

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

sql

@Column(name="open")

在hibernate状态下使用 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'.

我希望 hibernate 在创建表时使用带引号的标识符。

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


阅读 323

收藏
2021-06-07

共1个答案

admin

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

@Column(name="`open`")

这是从 Hiberate Core 继承的语法:

5.4. SQL 引用标识符
您可以通过将表名或列名括在映射文档中的反引号中来强制 Hibernate 在生成的 SQL 中引用标识符。Hibernate 将为 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\"")
2021-06-07