@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'.
テーブルを作成するときに、休止状態が引用識別子を使用することを期待していました。
フィールドの名前を変更する以外に、これを処理する方法に関するアイデアはありますか?
同じ問題がありましたが、Transaction
と呼ばれるテーブル名がありました。設定した場合
hibernate.globally_quoted_identifiers=true
その後、すべてのデータベース識別子が引用されます。
ここに私の答えを見つけました エラーを与えるテーブル名休止状態の特殊文字
そして、ここで利用可能なすべての設定を見つけました https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/appendices/Configurations.html
しかし、これに関するより良いドキュメントを見つけることができませんでした。
私の場合、設定は私のSpringプロパティファイルにありました。コメントで述べたように、それは他の、休止状態に関連する構成ファイルにもある可能性があります。
HibernateをJPA 1.0プロバイダーとして使用すると、予約されたキーワードをバックティックで囲むことでエスケープできます。
@Column(name="`open`")
これは、Hiberate Coreから継承された構文です。
5.4。SQL引用識別子
マッピングドキュメントのテーブルまたは列の名前をバックティックで囲むことにより、生成されたSQLでHibernateに識別子を強制的に引用させることができます。 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\"")
以下に示すように使用すると、動作するはずです
@Column(name="[order]")
private int order;
@Column(name="\"open\"")
これは確かに機能します。私が休止状態を学んでいたときに、同じ問題が私にも起こりました。
JPAを使用している場合は、二重引用符でエスケープできます。
@Column(name = "\"open\"")
HibernateネイティブAPIを使用している場合、バックティックを使用してそれらをエスケープできます。
@Column(name = "`open`")
予約済みキーワードを自動的にエスケープしたい場合は、true
にHibernate固有のhibernate.globally_quoted_identifiers
構成プロパティ:
<property
name="hibernate.globally_quoted_identifiers"
value="true"
/>
詳細については、 この記事 をご覧ください。
いいえ-列名を変更します。
これはデータベース固有であり、このような列を作成することはできません。結局、休止状態は最終的にDDLをデータベースに送信します。この列名で有効なDDLを作成できない場合、これはhibernateも同様にできないことを意味します。 DDLを作成している場合でも、引用によって問題が解決するとは思わない。
名前のエスケープに成功したとしても、名前を変更してください。このデータベースでは機能しますが、別のデータベースでは機能しません。
一部のJPA実装(たとえば、私が使用しているもの、DataNucleus)は自動的に識別子を引用するため、これを取得することはありません。