Hibernate - อัปเดตแบบสอบถามด้วยตำแหน่งที่อยู่ในข้อ

ฉันจะเริ่มต้นด้วยคำเตือนล่วงหน้าว่าฉันเป็นมือใหม่ที่จำศีล สมมติว่าฉันมีคำถามเช่นนั้น:

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

วิธีที่ถูกต้องในการดำเนินการค้นหาดังกล่าวคืออะไรหากโครงการของฉันใช้ไฮเบอร์เนต ฉันเลือกใช้ createSQLQuery() แบบธรรมดาหรือไม่ ฉันต้องการทำในลักษณะ "เชิงวัตถุ" มากกว่า แต่ดูเหมือนว่าฉันจะมีปัญหาในการรับข้อมูลจากฐานข้อมูลที่มีอยู่และอัปเดต ฉันใช้ createQuery() และรับข้อมูลเพื่ออัปเดตแล้วคิดรายการผลลัพธ์และใช้ตัวตั้งค่าหรือไม่ ปัญหาอีกประการหนึ่งคือ Where ในข้อ...

ขอบคุณสำหรับความช่วยเหลือใด ๆ


person Raidmaster    schedule 04.02.2013    source แหล่งที่มา


คำตอบ (1)


วิธี "เชิงวัตถุ" ที่ Hibernate รองรับนั้นผ่านเกณฑ์ API แต่ไม่รองรับการอัปเดต ให้เลือกเท่านั้น คุณจะต้องวนซ้ำและเรียกผู้ตั้งค่ามาอัปเดต (ซึ่งเหมาะสำหรับคอลเลกชันขนาดเล็กและทำงานได้ดีกับแคชระดับ 2 แต่ภัยพิบัติคือชุดข้อมูลของคุณมีขนาดใหญ่) มิฉะนั้นให้ใช้ HQL หรือ Native SQL

แบบสอบถามเกณฑ์ไฮเบอร์เนต:

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

อีกทางเลือกหนึ่งที่ควรค่าแก่การสำรวจคือ QueryDSL

person Καrτhικ    schedule 04.02.2013
comment
ฉันทำสิ่งนี้แตกต่างออกไปเล็กน้อยในตอนท้าย เนื่องจากไม่มีการตอบกลับอื่นๆ ฉันจึงเดาว่าเครื่องหมายถูกจะเป็นของคุณ ขอบคุณ. - person Raidmaster; 06.02.2013