Saya menggunakan Hibernate 3.5.6 dengan Oracle 10g. Saya melihat pengecualian di bawah ini selama inisialisasi tetapi aplikasi itu sendiri berfungsi dengan baik. Apa penyebab pengecualian ini? dan bagaimana itu bisa diperbaiki?
Pengecualian
Menonaktifkan pembuatan LOB kontekstual sebagai createClob()
metode melempar kesalahan:java.lang.reflect.InvocationTargetException
Info
Versi Oracle: Oracle Database 10g Enterprise Edition Rilis 10.2.0.4.0 Driver JDBC: Driver Oracle JDBC, versi: 11.1.0.7.0
Jawaban:
Nonaktifkan peringatan ini dengan menambahkan properti di bawah.
Untuk aplikasi Spring:
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
JPA normal:
hibernate.temp.use_jdbc_metadata_defaults=false
sumber
Seperti yang Anda perhatikan, pengecualian ini bukanlah masalah nyata. Itu terjadi selama boot, ketika Hibernate mencoba mengambil beberapa informasi meta dari database. Jika ini mengganggu Anda, Anda dapat menonaktifkannya:
hibernate.temp.use_jdbc_metadata_defaults false
sumber
useJdbcMetadata
kefalse
mencegahmetaReportsDDLCausesTxnCommit
untuk diatur dan tetapfalse
! grepcode.com/file/repo1.maven.org/maven2/org.hibernate/…Melihat komentar di sumber :
Jadi, ia mencoba menentukan apakah ia dapat menggunakan beberapa metode JDBC 4 baru. Saya kira driver Anda mungkin tidak mendukung metode pembuatan LOB yang baru.
sumber
Driver does not support LOB feature
atauDatabase does not support LOB feature
?Untuk menyembunyikan pengecualian:
Untuk Hibernate 5.2 (dan Spring Boot 2.0), Anda dapat menggunakan properti use_jdbc_metadata_defaults yang ditunjukkan oleh orang lain:
# Meant to hide HHH000424: Disabling contextual LOB creation as createClob() method threw error spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false
Atau, jika Anda ingin tidak memiliki efek samping dari pengaturan di atas (ada komentar yang memperingatkan kami tentang beberapa efek samping Oracle, saya tidak tahu apakah itu valid atau tidak), Anda dapat menonaktifkan logging pengecualian seperti ini :
logging: level: # Hides HHH000424: Disabling contextual LOB creation as createClob() method threw error org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl: WARN
sumber
Untuk menghilangkan pengecualian
INFO - HHH000424: Disabling contextual LOB creation as createClob() method threw error :java.lang.reflect.InvocationTargetException
Dalam
hibernate.cfg.xml
file Tambahkan properti di bawah ini<property name="hibernate.temp.use_jdbc_metadata_defaults">false</property>
sumber
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false" />
kepersistence.xml
file dan itu memecahkan masalah untuk saya. Saya menggunakan JPA dengan Hibernate.Perbarui ini untuk menggunakan Hibernate 4.3.x / 5.0.x - Anda bisa menyetel properti ini ke true:
<prop key="hibernate.jdbc.lob.non_contextual_creation">true</prop>
untuk menghilangkan pesan kesalahan itu. Efek yang sama tetapi tanpa detail "lempar pengecualian". Lihat sumber LobCreatorBuilder untuk detailnya.
sumber
Cukup tambahkan baris di bawah ini di application.properties
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults: false
sumber
Seperti yang disebutkan di komentar lain menggunakan
hibernate.temp.use_jdbc_metadata_defaults = false
... akan memperbaiki pesan yang mengganggu, tetapi dapat menyebabkan banyak masalah mengejutkan lainnya. Solusi yang lebih baik adalah menonaktifkan pembuatan LOB kontekstual dengan ini:
hibernate.jdbc.lob.non_contextual_creation = true
Ini akan menyebabkan Hibernate (dalam kasus saya, 5.3.10.Final) untuk melewati pemeriksaan driver JDBC dan hanya menampilkan pesan berikut:
HHH000421: Disabling contextual LOB creation as hibernate.jdbc.lob.non_contextual_creation is true
Sejauh ini sepertinya pengaturan ini tidak menimbulkan masalah.
sumber
Memperbarui driver JDBC ke versi terbaru menghapus pesan kesalahan yang tidak menyenangkan.
Anda dapat mendownloadnya dari sini:
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
Pendaftaran gratis diperlukan.
sumber
Jika Anda mengatur:
hibernate.temp.use_jdbc_metadata_defaults: false
hal ini dapat menyebabkan Anda bermasalah dengan PostgreSQL ketika nama tabel Anda berisi kata khusus seperti pengguna. Setelah dimasukkan akan mencoba mencari urutan id dengan:
select currval('"user"_id_seq');
yang jelas akan gagal. Ini setidaknya dengan Hibernate 5.2.13 dan Spring Boot 2.0.0.RC1. Belum menemukan cara lain untuk mencegah pesan ini jadi abaikan saja.
sumber
Saat bekerja dengan Spring boot 2.1.x pesan peringatan ini muncul saat memulai aplikasi.
Seperti yang ditunjukkan di sini, mungkin masalah ini tidak muncul di versi sebelumnya karena properti terkait disetel ke true secara default dan sekarang salah:
https://github.com/spring-projects/spring-boot/issues/12007
Akibatnya, menyelesaikan ini semudah menambahkan properti berikut ke file spring application.property.
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation = true
sumber
Masalah terjadi karena Anda tidak memilih JDBC yang sesuai. Cukup unduh dan gunakan JDBC untuk oracle 10g, bukan 11g.
sumber
Saya menggunakan hibernate 5.3.17 dan berfungsi dengan baik dengan menambahkan properti yang diberikan
hibernate.default_entity_mode=dynamic-map hibernate.temp.use_jdbc_metadata_defaults=true hibernate.jdbc.lob.non_contextual_creation = true
Terima kasih
sumber
Saya mengalami kesalahan ini ketika aplikasi web saya dimulai di Linux oleh pengguna yang masuk dengan hak akses yang tidak memadai. Kesalahan ini
biasanya didahului oleh kesalahan / pengecualian lain, terutama dari server aplikasi Anda yaitu untuk Tomcat:
atau
Larutan:
Hentikan aplikasi web Anda saat ini.
Login dengan pengguna super atau mereka yang memiliki hak akses yang memadai yaitu root
Mulai ulang aplikasi web Anda atau panggil fungsi sebelumnya lagi.
sumber
Untuk siapa saja yang menghadapi masalah ini dengan Spring Boot 2
secara default spring boot menggunakan versi hibernate 5.3.x, saya telah menambahkan properti berikut di pom.xml saya
<hibernate.version>5.4.2.Final</hibernate.version>
dan kesalahan hilang. Alasan kesalahan sudah dijelaskan dalam posting di atas
sumber
Hapus anotasi @Temporal jika Anda menggunakannya dengan kelas java.sql. *.
sumber
Periksa apakah Anda tidak menggunakan VPN. Saya memiliki masalah yang sama tetapi menyadari db yang saya hubungkan ke remote!
sumber