@Column(name="open")
Menggunakan dialek sqlserver dengan 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'.
Saya mengharapkan hibernate untuk menggunakan pengenal yang dikutip saat membuat tabel.
Ada ide tentang cara menangani ini ... selain mengganti nama bidang?
Jawaban:
Punya masalah yang sama, tetapi dengan nama tablen disebut
Transaction
. Jika Anda mengaturhibernate.globally_quoted_identifiers=true
Kemudian semua pengidentifikasi database akan dikutip.
Menemukan jawaban saya di sini Karakter khusus dalam nama tabel hibernate memberikan kesalahan
Dan temukan semua pengaturan yang tersedia di sini https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/appendices/Configurations.html
Tidak dapat menemukan dokumen yang lebih baik untuk ini.
Dalam kasus saya, pengaturannya ada di file properti Spring saya. Seperti yang disebutkan di komentar, bisa juga di file konfigurasi lain yang terkait dengan hibernasi.
sumber
persistence.xml
proyek JBoss Anda.Dengan Hibernate sebagai penyedia JPA 1.0, Anda dapat keluar dari kata kunci yang dipesan dengan menyertakannya di dalam backticks:
@Column(name="`open`")
Ini adalah sintaks yang diwarisi dari Hiberate Core:
Di JPA 2.0, sintaksnya distandarisasi dan menjadi:
@Column(name="\"open\"")
Referensi
Pertanyaan-pertanyaan Terkait
sumber
@Column(name="[open]")
jauh lebih cantik :)Keluar secara manual dari kata kunci yang dipesan
Jika Anda menggunakan JPA, Anda dapat keluar dengan tanda kutip ganda:
@Column(name = "\"open\"")
Jika Anda menggunakan Hibernate native API, Anda dapat menghindarinya menggunakan backticks:
@Column(name = "`open`")
Secara otomatis keluar dari kata kunci yang dipesan
Jika Anda ingin keluar dari kata kunci yang dicadangkan secara otomatis, Anda dapat mengatur ke properti konfigurasi
true
khusus Hibernasihibernate.globally_quoted_identifiers
:<property name="hibernate.globally_quoted_identifiers" value="true" />
Format Yaml
spring: jpa: properties: hibernate: globally_quoted_identifiers: true
Untuk lebih jelasnya, lihat artikel ini .
sumber
Jika Anda menggunakan seperti yang ditunjukkan di bawah ini seharusnya berfungsi
@Column(name="[order]") private int order;
sumber
@Column(name="\"open\"")
Ini pasti berhasil, Masalah yang sama terjadi dengan saya, ketika saya belajar hibernasi.
sumber
Tidak - ubah nama kolom.
Ini khusus database, dan Anda tidak bisa membuat kolom seperti itu. Setelah semua hibernate akhirnya mengirimkan DDL ke database. Jika Anda tidak dapat membuat DDL yang valid dengan nama kolom ini, artinya hibernasi juga tidak bisa. Saya rasa mengutip tidak akan menyelesaikan masalah bahkan jika Anda menulis DDL.
Bahkan jika Anda entah bagaimana berhasil melarikan diri dari nama itu - ubahlah. Ini akan bekerja dengan database ini, tetapi tidak akan bekerja dengan yang lain.
sumber
Beberapa implementasi JPA (misalnya yang saya gunakan, DataNucleus) secara otomatis mengutip pengenal untuk Anda, jadi Anda tidak akan pernah mendapatkan ini.
sumber