Saya menggunakan Spring JPA untuk akses database. Saya dapat menemukan contoh seperti findByName dan countByName, yang saya tidak perlu menulis implementasi metode apa pun. Saya berharap menemukan contoh untuk menghapus sekelompok record berdasarkan beberapa kondisi.
Apakah Spring JPA mendukung deleteByName-like delete? Pointer apa pun dihargai.
Salam dan terima kasih.
spring
spring-data
spring-data-jpa
penasaran1
sumber
sumber
DELETE FROM x WHERE id = ?1 or parent_id = ?1
. Btw, pastikan Anda tidak memiliki tipeparent__id
(apakah Anda sengaja memiliki tanda hubung rendah ganda?). Mengapa Anda menggunakan opsi kueri asli?Penurunan kueri penghapusan menggunakan nama metode yang diberikan didukung mulai dengan versi 1.6.0.RC1 dari Spring Data JPA. Kata kunci
remove
dandelete
didukung. Sebagai nilai pengembalian, seseorang dapat memilih antara nomor atau daftar entitas yang dihapus.sumber
Jika Anda melihat kode sumber dari Spring Data JPA, dan khususnya
PartTreeJpaQuery
kelasnya, Anda akan melihat bahwa mencoba untuk memberi contohPartTree
. Di dalam kelas itu ekspresi reguler berikutprivate static final Pattern PREFIX_TEMPLATE = Pattern.compile("^(find|read|get|count|query)(\\p{Lu}.*?)??By")
harus menunjukkan apa yang diperbolehkan dan apa yang tidak.
Tentu saja jika Anda mencoba menambahkan metode seperti itu, Anda akan benar-benar melihat bahwa metode tersebut tidak berfungsi dan Anda mendapatkan pelacakan tumpukan penuh.
Saya harus mencatat bahwa saya menggunakan melihat versi
1.5.0.RELEASE
Spring Data JPAsumber
2 cara: -
Kueri Kustom pertama
Kueri JPA kedua berdasarkan metode
Ketika Anda pergi dengan query dengan metode (cara ke-2) pertama-tama akan melakukan panggilan get
Kemudian itu akan memuatnya dalam Daftar Kemudian itu akan memanggil delete id satu per satu
Pertama ambil daftar objeknya, kemudian for loop untuk menghapus id satu per satu
Tapi, opsi pertama (kueri khusus),
Itu hanya satu kueri. Itu akan menghapus di mana pun nilai itu ada.
Buka tautan ini juga https://www.baeldung.com/spring-data-jpa-deleteby
sumber
Jika Anda akan menggunakan metode penghapusan yang ditentukan sebelumnya seperti yang disediakan langsung oleh JPA musim semi, maka di bawah dua kueri akan dieksekusi oleh kerangka kerja.
Pertama-tama kumpulkan data (seperti id dan kolom lain) menggunakan dengan mengeksekusi kueri pemilihan dengan kueri hapus di mana klausa.
kemudian setelah mendapatkan resultSet dari query pertama, query delete kedua akan dijalankan untuk semua id (satu per satu)
Catatan: Ini bukan cara yang dioptimalkan untuk aplikasi Anda karena banyak kueri akan dieksekusi untuk kueri penghapusan MYSQL tunggal.
Ini adalah cara lain yang dioptimalkan untuk menghapus kode kueri karena hanya satu kueri penghapusan yang akan dijalankan dengan menggunakan metode yang disesuaikan di bawah ini.
sumber
Berhati-hatilah saat Anda menggunakan kueri turunan untuk penghapusan batch. Ini bukan yang Anda harapkan: DeleteExecution
sumber
Ya, metode deleteBy didukung Untuk menggunakannya, Anda perlu membuat anotasi metode dengan @Transactional
sumber