Friday, March 31, 2006

Hibernate Load, subclass mapping

กรณีที่เราออกแบบ class ของเราให้เป็น Inheritance mapping



ถ้าเราใช้คำสั่ง load กับ base class
Person person = session.load(Person.class, id);
Employee emp = (Employee) person; // ClassCastException here

เวลา run จะเกิด ClassCastException
โดย object ที่ return จาก method load จะอยู่ในรูป
proxy object ทำให้ cast ไม่ได้

ไปค้นหาใน Issue Tracking ของ Hibernate
พบ issue ที่ HHH-80
อธิบายว่า มันเป็นพฤติกรรมที่พึ่งมีใน Hibernate 3
กรณีที่ lazy="true" (default setting), คำสั่ง load จะได้ผลลัพท์เป็น proxy object

การแก้ไข เลือกวิิธีการใดการหนึ่งจากต่อไปนี้
  • เลือก config lazy="false"
  • ใช้คำสั่ง session.get แทน session.load

Related link from Roti

No comments: