并不是持久化类的所有属性都直接和表的字段匹配,持久化类的有些属性的值必须在运行时通过计算才能得出来,这种属性称为派生属性。
有两中方法:
1. 在映射文件中不映射新的属性。而在持久化类中定义一个新属性的set方法加入逻辑计算,在程序中通过调用该方法给原属性附值。
2. 利用元素的formula属性。Formula属性用来设置一个SQL表达式,Hibernate将根据它来计算出派生属性的值。下面以Customer类的totalPrice属性为例,介绍元素的formula属性的用法。Customer类的totalPrice属性表示可户所有的定单价格总和,他的取值与Customer对象关联的所有Order对象的price属性值的和。在CUSTOMERS
表中么对应的TOTAL_PRICE字段。在Customer.xml文件中映射totalPrice属性的代码如下:
from ORDERS o where o.CUSROMER_ID=ID)”/>
当Hibernate从数据库中查询Customer对象时,在select语句中会包含以上用于计算的totalPrice派生属性的子查询语句:
Select ID,NAME,SEX,(select sum(o.PRICE) from ORDERS o where
o.CUSTOMER_ID=1)from CUSTOMERS;