猿问

用JPA创建具有保留字名的字段

用JPA创建具有保留字名的字段

@Column(name="open")

使用sqlserver方言和Hibernate。

[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在创建表时使用引用的标识符。

对如何处理这件事有什么想法.。除了改名外?


开心每一天1111
浏览 1721回答 3
3回答

一只甜甜圈

使用Hibernate作为JPA1.0提供程序,您可以通过将保留关键字封装在Backticks中来转义它:@Column(name="`open`")这是从HiberateCore继承的语法:5.4.SQL引号标识符您可以强制Hibernate引用生成的SQL中的标识符,方法是将表或列名封装在映射文档的Backticks中。Hibernate将对SQL方言使用正确的引号样式。这通常是双引号,但SQLServer使用括号,MySQL使用Backticks。<class&nbsp;name="LineItem"&nbsp;table="`Line&nbsp;Item`"> &nbsp;&nbsp;&nbsp;&nbsp;<id&nbsp;name="id"&nbsp;column="`Item&nbsp;Id`"/><generator&nbsp;class="assigned"/></id> &nbsp;&nbsp;&nbsp;&nbsp;<property&nbsp;name="itemNumber"&nbsp;column="`Item&nbsp;#`"/> &nbsp;&nbsp;&nbsp;&nbsp;...</class>在JPA2.0中,语法是标准化的,成为:@Column(name="\"open\"")参考文献Hibernate参考指南5.4.SQL引号标识符JPA2.0规范2.13数据库对象的命名相关问题名为“重复”的Hibernate、MySQL和表-奇怪的行为Hibernate表和列的自动保留字转义

守着星空守着你

如果您使用如下所示,它应该可以工作。@Column(name="[order]")private&nbsp;int&nbsp;order;
随时随地看视频慕课网APP
我要回答