hbm.xml

2014/03/12 01:39
1.在hbm.xml配置文件中,某个属性的值可以通过子查询获得(该查询语句为Sql),示例
<property name = "totalPrice"  formula = "(select sum(o.price) from order as o)"/>
注意因为此属性为子查询,所以其sql语句要用小括号括起来

2.用于控制insert和update语句映射属性
<property>元素:
insert属性:如果为false,表示插入时不会插入该属性,默认为true
update属性:如果为false,表示更新时不会更新该属性,默认为true
<class>元素:
mutable:如果为false,表示这个类下的所有属性的update为false,即这个对象不能被更新
dynamic-insert:动态生成insert,会保存其中不为NULL的属性,默认为false
dynamic-update:动态生成update,会保存其中有变化的属性,默认为false 
动态sql占用资源很小,当一个表中有大量的字段时,通常将dynamic-insert和dynamic-update设置为true

3.标识符
如果一个列名为系统关键字或保留字时,其列名需要用单引号括起来 如:
<property name = "description" column = " 'DISCRIPTION'  "   />

4.schema
如果在数据库中,有两个同名的表,但是schema不同,可以在hibernate-mapping中设置schema来区分,如
<hibernate-mapping schema = "HBYC">
...
</hibernate-mapping>
注意,在class元素中的 schema属性会覆盖hibernate-mapping中的schema

5.package
在hibernate-mapping中可以设置包名,即package属性,这样在class中的类就不用再写包名,如
<hibernate-mapping package = "mypack">
...
</hibernate-mapping>

6.常用id生成策略
  increment:自增长,需要主键为整形
  identity:由数据库完成自增长,需要数据库主键支持并设置自增长机制
  native:自动判断数据库底层生成策略,如果是mysql就用identity,如果是oracle就用sequence
  assigned:程序来手动设置主键值

7.复合主键,示例
<class name = "mypack.Customer" table = "CUSTOMERS">
    <composite-id>
        <key-property name = "name" columd = "NAME" type = "string"/>
        <key-property name = "companyId" columd = "COMPANY_ID" type = "string"/>
        <version name = "version" column = "VERSION" unsave-value="null"/>
        ...
    </composite>
</class>
以下是程序加载Customer类
Customer customer = new Customer();
customer.setName = "刘伟成";
customer.setCompanyId = "10086";
session.get(Customer.class,customer);
由于是复合主键,所以Customer类, 必须实现Serializable,和重写equals和hashCode方法
否则Hibernate无法判断两个对象是否相等
如果其它对象需要关联这个customer对象时,其配置的关联属性顺序必须与customer声明的主键顺序一致

8.配置<many-to-one>元素,示例:
 <many-to-one name="customer" class ="mypack.Customer" column = "CUSTOMER_ID" cascade = "save-upate"/>

  name属性:关联的对象在本类中的对象名
  column属性:关联表在本表中的外键字段名
  class属性:关联的对象类名
  lazy属性:延迟加载,默认为true, 如果设置为true,则需要注意session关闭问题
  cascade属性:级联操作,默认值为none
  cascade="save-update":表示hibernate会自动保存或更新此对象所关联的其它对象
  cascade="delete":表示当hibernate删除此对象时,同时也会删除和这个对象关联的其它对象
  cascade="all-delete-orphan":表示如果将customer对象中的orderSet对象设置为null,当保存customer对象时,会自动删除之前关联的 
                                                      order对象

9.<set>元素,用来配置一对多关联,示例
<set name = "orders" cascade = "save-update" inverst="true">
    <key coumn = "CUSTOMER_ID"/>
    <one-to-many class="mypack.Order"/>
</set>
 name属性:关联的对象在本类中的对象名
 inverst属性:表示控制端,一般设置为true,表示对象的关系由此Set中的对象来维护, 当order对象中的customer对象属性发生变化,保存order时,会同时更新customer对象,  但customer对象中的orderSet发生变化时,保存cutomer对象不会同时更新其关联的order对象
 key元素:表示关联表在本表中的外键字段名
 one-to-many元素:表示关联对象的类名
在双向的多对一关联中,一般将一方的inverst设置为true,另一方设置为false,如果两个都设置为true,则hibernate不会去级联维护关系。



 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值