Ketika kode saya mengeluarkan panggilan seperti ini:
entityManager.find(Customer.class, customerID);
Bagaimana saya bisa melihat permintaan SQL untuk panggilan ini? Dengan asumsi saya tidak memiliki akses ke server database untuk profil / memonitor panggilan, apakah ada cara untuk login atau melihat dalam IDE saya pertanyaan SQL yang sesuai yang dikeluarkan oleh panggilan JPA? Saya akan menentang SQL Server 2008 R2 menggunakan driver jTDS.
Jawaban:
Opsi pencatatan khusus untuk penyedia. Anda perlu tahu implementasi JPA mana yang Anda gunakan.
Hibernate ( lihat di sini ):
EclipseLink ( lihat di sini ):
OpenJPA ( lihat di sini ):
DataNucleus ( lihat di sini ):
Setel kategori log
DataNucleus.Datastore.Native
ke level, sepertiDEBUG
.sumber
Juga, jika Anda menggunakan EclipseLink dan ingin menampilkan nilai parameter SQL, Anda bisa menambahkan properti ini ke file persistence.xml Anda:
sumber
Jika Anda menggunakan hibernate dan logback sebagai logger Anda, Anda bisa menggunakan yang berikut (hanya menunjukkan binding dan bukan hasilnya):
org.hibernate.SQL = DEBUG mencetak Kueri
org.hibernate.type = TRACE mencetak binding dan biasanya hasilnya, yang akan ditekan melalui filter khusus
Anda memerlukan dependensi janino (http://logback.qos.ch/manual/filters.html#JaninoEventEvaluator):
sumber
Di EclipseLink untuk mendapatkan SQL untuk Permintaan tertentu saat runtime Anda dapat menggunakan API DatabaseQuery:
SQL ini akan berisi? untuk parameter. Untuk mendapatkan SQL yang diterjemahkan dengan argumen Anda memerlukan DatabaseRecord dengan nilai parameter.
Sumber: Cara mendapatkan SQL untuk Kueri
sumber
Untuk melihat semua SQL dan parameter di OpenJPA, masukkan dua parameter ini di persistence.xml:
sumber
Jika Anda ingin melihat kueri yang tepat sama sekali dengan nilai parameter dan nilai balik Anda dapat menggunakan driver proxy jdbc. Ini akan mencegat semua panggilan jdbc dan mencatat nilainya. Beberapa proxy:
Mereka juga dapat menyediakan beberapa fitur tambahan, seperti mengukur waktu eksekusi untuk pertanyaan dan mengumpulkan statistik.
sumber
Contoh menggunakan log4j ( src \ log4j.xml ):
sumber
Saya sudah membuat cheat-sheet yang menurut saya bisa bermanfaat bagi orang lain. Dalam semua contoh, Anda dapat menghapus
format_sql
properti jika Anda ingin menjaga kueri yang dicatat dalam satu baris (tidak ada pencetakan cantik).Cukup cetak kueri SQL hingga keluar standar tanpa parameter pernyataan yang disiapkan dan tanpa optimisasi kerangka logging :
application.properties
mengajukan:application.yml
mengajukan:Cukup cetak kueri SQL dengan parameter pernyataan yang disiapkan menggunakan kerangka logging :
application.properties
mengajukan:application.yml
mengajukan:Cukup cetak kueri SQL tanpa parameter pernyataan yang disiapkan menggunakan kerangka logging :
application.properties
mengajukan:application.yml
mengajukan:Sumber (dan lebih detail): https://www.baeldung.com/sql-logging-spring-boot
sumber
Selain itu, jika menggunakan WildFly / JBoss, atur level logging dari org.hibernate ke DEBUG
sumber
Pilihan lain yang bagus jika Anda memiliki terlalu banyak log dan Anda hanya ingin menempatkan sementara
System.out.println()
, Anda bisa, tergantung pada penyedia Anda lakukan:sumber
Jika Anda menggunakan kerangka kerja Spring. Ubah file application.properties Anda seperti di bawah ini
sumber
Lihat Tidak dapat membuat hibernasi berhenti menampilkan SQL menggunakan Spring JPA Vendor Adapter
sumber
Dengan Spring Boot cukup tambahkan: spring.jpa.show-sql = true ke application.properties. Ini akan menampilkan kueri tetapi tanpa parameter aktual (Anda akan melihat? Bukannya setiap parameter).
sumber
Selama pengembangan eksploratif, dan untuk memfokuskan log debugging SQL pada metode spesifik yang ingin saya periksa, saya menghias metode itu dengan pernyataan logger berikut:
sumber
EclipseLink untuk menampilkan SQL (persistence.xml config):
sumber
Ada file bernama persistence.xml Tekan Ctrl + Shift + R dan temukan, lalu, ada tempat menulis sesuatu seperti showSQL.
Sederhananya
Saya tidak yakin apakah server harus dimulai sebagai mode Debug. Periksa SQL yang dibuat di konsol.
sumber