JPA Caching โดยใช้ Native Query
Problem
เนื่องจากต้องการทำ entity caching เพื่อ join ข้อมูลจาก 2 table โดยมีการจัด priority ของข้อมูลคือให้เอาจาก table แรกเป็นหลัก ถ้าไม่เจอให้ไปดึงข้อมูลจาก table สอง
Assumption
พัฒนาโดยใช้
- JPA 1.0
- Hibernate 3
- WebLogic Workshop 10.3
Troubleshooting
- เริ่มต้นด้วยการสร้าง Named Query จากเงื่อนไขของปัญหาข้างต้น จึงใช้ Native Query เพื่อ join 2 table เข้าด้วยกัน และเลือกข้อมูลจาก priority ของ table เป็นค่าส่งกลับไปใช้งาน โดยทำการระบุ hint ว่าจะทำ caching บน entity นี้
- สร้าง file ehcache.xml และวางตามตัวอย่าง
- config ค่า parameter สำหรับการทำ caching ในที่นี้ตั้ง TTL ไว้ที่ 60 วินาที
- แก้ไข persistence.xml เพื่อเปิดการใช้งาน caching โดยในที่นี้ใช้ ehcache library
- เพิ่ม backport-util-concurrent-3.0.jar และ ehcache-1.5.0.jar ใน server class path
- เรียกใช้งาน Named Query ที่สร้างไว้
Conclusion
จากการทดสอบ ได้ผลลัพธ์ออกมาถูกต้อง โดยดูจาก sql statement ที่แสดงออกใน console จะไม่พบ statement ที่ทำการ caching ไว้ แต่ใน JPA น่าจะมีวิธีทำที่ถูกต้องกว่านี้
No comments:
Post a Comment