Hibernasi - perbarui kueri dengan klausa di mana

Saya akan mulai dengan peringatan awal bahwa saya adalah pemula yang berhibernasi. Katakanlah saya punya pertanyaan seperti itu:

UPDATE entity SET attribute='value' WHERE anotherAttribute IN (val1, val2);

Apa cara yang benar untuk menjalankan kueri seperti itu jika proyek saya menggunakan hibernasi? Apakah saya menggunakan createSQLQuery() sederhana? Saya ingin melakukannya dengan cara yang lebih "berorientasi objek" tetapi sepertinya saya memiliki masalah dalam mendapatkan data dari database yang ada dan memperbaruinya. Apakah saya menggunakan createQuery() dan memperbarui data lalu memikirkan daftar hasil dan menggunakan penyetel? Masalah lainnya adalah di mana dalam klausa...

Terima kasih atas bantuannya.


person Raidmaster    schedule 04.02.2013    source sumber


Jawaban (1)


Cara "berorientasi objek" yang didukung oleh Hibernate adalah melalui API kriteria tetapi tidak mendukung pembaruan, hanya memilih. Anda perlu mengulanginya dan memanggil penyetel untuk memperbarui (yang baik untuk koleksi kecil dan berfungsi baik dengan cache level-2 tetapi bencana adalah kumpulan data Anda besar). Kalau tidak, gunakan HQL atau SQL asli.

Kueri kriteria hibernasi:

 session.createCriteria(Entity.class)
    .add(Restrictions.eq("attribute", "value"))
    .add(Restrictions.in("anotherAttribute", <collection-of-values>)
    .list();

Opsi lain yang perlu ditelusuri adalah QueryDSL.

person Καrτhικ    schedule 04.02.2013
comment
Saya melakukan ini sedikit berbeda pada akhirnya. Karena kurangnya tanggapan lain, saya kira tanda centang diberikan kepada Anda. Terima kasih. - person Raidmaster; 06.02.2013