API เกณฑ์
API ของเกณฑ์เหมาะสำหรับการสืบค้นที่สร้างขึ้นแบบไดนามิก ดังนั้นถ้าคุณต้องการที่จะเพิ่มฟิลเตอร์ WHERE ข้อ JOIN ข้อแตกต่างกันหรืออนุประโยคสั่ง BY หรือคอลัมน์ฉายแล้วเกณฑ์ API สามารถช่วยให้คุณสร้างแบบสอบถามแบบไดนามิกในทางที่ยังช่วยป้องกันการโจมตี SQL Injection
บนมืออื่น ๆ , คำสั่งเกณฑ์เป็นที่แสดงออกน้อยและยังสามารถนำไปสู่ความซับซ้อนมากและแบบสอบถาม SQL ไม่มีประสิทธิภาพตามที่อธิบายไว้ในบทความนี้
JPQL และ HQL
JPQL เป็นภาษาคิวรีเอนทิตีมาตรฐาน JPA ในขณะที่ HQL ขยาย JPQL และเพิ่มคุณสมบัติเฉพาะของไฮเบอร์เนต
JPQL และ HQL นั้นแสดงออกและคล้ายกับ SQL มาก ซึ่งแตกต่างจาก Criteria API, JPQL และ HQL ทำให้ง่ายต่อการทำนายเคียวรี SQL ที่สร้างโดยผู้ให้บริการ JPA นอกจากนี้ยังง่ายกว่ามากในการตรวจสอบแบบสอบถาม HQL ของคน ๆ หนึ่งกว่าเกณฑ์
เป็นที่น่าสังเกตว่าการเลือกเอนทิตีด้วย JPQL หรือ Criteria API นั้นสมเหตุสมผลถ้าคุณต้องการแก้ไข มิฉะนั้นการฉาย DTOเป็นทางเลือกที่ดีกว่ามาก
ข้อสรุป
หากคุณไม่ต้องการเปลี่ยนแปลงโครงสร้างคิวรีเอนทิตีให้ใช้ JPQL หรือ HQL หากคุณต้องการเปลี่ยนเกณฑ์การกรองหรือการเรียงลำดับหรือเปลี่ยนการฉายภาพให้ใช้ Criteria API
อย่างไรก็ตามเนื่องจากคุณใช้ JPA หรือ Hibernate ไม่ได้หมายความว่าคุณไม่ควรใช้ SQL ดั้งเดิม การสืบค้น SQL นั้นมีประโยชน์มากและ JPQL และ Criteria API ไม่ใช่การแทนที่สำหรับ SQL ลองอ่านบทความนี้สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับหัวข้อนี้