TJR*_*TJR 76 java sql-server orm hibernate jpa
@Column(name="open")
Run Code Online (Sandbox Code Playgroud)
使用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'.
Run Code Online (Sandbox Code Playgroud)
我希望hibernate在创建表时使用带引号的标识符.
关于如何处理这个问题的任何想法...除了重命名字段?
Pas*_*ent 123
使用Hibernate作为JPA 1.0提供程序,您可以通过将其保留在反引号中来转义保留关键字:
@Column(name="`open`")
Run Code Online (Sandbox Code Playgroud)
这是从Hiberate Core继承的语法:
5.4.SQL引用的标识符
您可以强制Hibernate通过在映射文档中的反引号中包含表或列名称来在生成的SQL中引用标识符.Hibernate将为SQL Dialect使用正确的引用样式.这通常是双引号,但SQL Server使用括号,MySQL使用反引号.
Run Code Online (Sandbox Code Playgroud)<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\"")
Run Code Online (Sandbox Code Playgroud)
Raf*_*iek 45
有同样的问题,但有一个名字叫Transaction.如果你设置
hibernate.globally_quoted_identifiers=true
Run Code Online (Sandbox Code Playgroud)
然后将引用所有数据库标识符.
在这里找到我的答案 表名hibernate中的特殊字符给出了错误
并在此处找到所有可用的设置 https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/appendices/Configurations.html
但是找不到更好的文档.
在我的情况下,设置是在我的Spring属性文件中.正如评论中所提到的,它也可以在其他与hibernate相关的配置文件中.
小智 15
如果您使用如下所示它应该工作
@Column(name="[order]")
private int order;
Run Code Online (Sandbox Code Playgroud)
Ahm*_*our 12
还有另一个选项:hibernate.auto_quote_keyword
哪个
指定是否自动引用任何被视为关键字的名称。
<property name="hibernate.auto_quote_keyword" value="true" />
Run Code Online (Sandbox Code Playgroud)
亚米尔
spring:
jpa:
properties:
hibernate:
auto_quote_keyword: true
Run Code Online (Sandbox Code Playgroud)
wmn*_*tin 10
@Column(name="\"open\"")
Run Code Online (Sandbox Code Playgroud)
这肯定会起作用,当我学习hibernate时,同样的问题发生在我身上.
如果您使用的是JPA,则可以使用双引号进行转义:
@Column(name = "\"open\"")
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Hibernate本机API,则可以使用反引号将其转义:
@Column(name = "`open`")
Run Code Online (Sandbox Code Playgroud)
如果要自动转义保留的关键字,则可以设置为true特定于Hibernate的hibernate.globally_quoted_identifiers配置属性:
@Column(name = "\"open\"")
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请查看本文。
| 归档时间: |
|
| 查看次数: |
43921 次 |
| 最近记录: |