hibernate映射文件
映射文件在.hbm.xml文件中编写
1 |
|
配置访问持久化类属性的策略
可以在property元素中配置access属性来指定hibernate访问持久化类属性的方式
property 默认值,使用getter/setter方法来访问类的属性,不需要管有没有该成员变量
field 使用java的反射机制来直接访问类的属性
1 | <property name="customerName" type="java.lang.String" access="property"> |
设置派生属性
有些属性的值需要在运行时进行计算才可以获取到,此时可以使用property元素的formula属性,该属性用来设置一个SQL表达式,hibernate根据SQL来计算出派生属性的值
1 | <property name="totalPrice" formula="(select sum(price) from orders where custom_id=id)"></property> |
在查询的时候就会进行拼接子查询来获取该属性的值
1 | select id,name,(select sum(price) from orders where custom_id=1) from customer where id = 1; |
控制字段的插入和更新
hibernate生成的save()、update()语句默认是插入和更新全部的字段,可以进行自定义设置
- property元素的insert属性 默认为true,如果设置为false,表示insert语句中不包含该字段
- property元素的update属性 默认为true,如果设置为false,表示update语句中不包含该字段
- class元素的mutable属性 默认为true,如果设置为false,等价于该类下所有的property元素的update属性为false,整个实例都不可以被更新
- class属性的dynamic-insert属性 默认为false,如果为true,表示当保存一个对象时,会动态的生成insert语句,仅包含取值不为null的字段
- class属性的dynamic-update属性 默认为false,如果为true,表示当更新一个对象时,会动态的生成update语句,仅包含需要更新的字段
注意:当表的字段比较多时,可以设置dynamic-insert、dynamic-update来提升性能