对象状态分类:
a 临时状态(transient)
没有OID,不跟session关联,数据库没有记录与之关联,如新new的对象。
b 持久化状态(persistent)
有OID,存在于session中,数据库有记录与之关联。
Hibernate会自动侦测及文护持久化对象的属性变化,在提交时自动的同步更新数据库。
c 游离状态(Deteched)
有OID,不跟session关联,数据库中可能有一条记录与之匹配。
游离状态的属性变化,Hibernate不会文护更新。
C 关联映射
a 一对多、多对一关系
两个类中,一个类有另一个类的一个引用,另一个类有这个类的集合引用,则这两个类为一对多、多对一关系。例如一个用户对应多个收货人。
在用户映射文件User.hbm.xml中:
<list name="recipients" cascade="all" lazy="false">
<key column="user_id"></key>
<index column="id"></index>
<one-to-many class="Recipient" />
</list>
在收件人映射文件Recipient.hbm.xml中:
<many-to-one name="user" class="User" column="user_id" lazy="false" cascade="save-update"/>
b 一对一关系
两个类各有另一个类的一个引用,这两个类互为一对一关系。
c 多对多关系
两个类互有集合引用,中间表是专门用来描述这两个类之间的关联关系。
中间表中两个外键分别关联两张表,通过中间表把复杂的多对多变成两个一对多关系。如商品和订单,中间表为商品列表。
在商品映射文件Goods.hbm.xml中:
<list name="lines" cascade="all" lazy="false">
<key column="goods_id"></key>
<index column="id"></index>
<one-to-many class="Line" />
</list>
在订单映射文件Order.hbm.xml中:
<map name="lines" cascade="all" lazy="false">
<key column="order_id"></key>
<map-key type="java.lang.Integer" column="key"></map-key>
<one-to-many class="Line" />
</map>
在中间表Line.hbm.xml中:
<many-to-one name="goods" class="Goods" column="goods_id"
cascade="all" lazy="false"></many-to-one>
<many-to-one name="order" class="Order" column="order_id"
cascade="all" lazy="false"></many-to-one>
D Hibernate查询
a OID查询
Session接口的中的get()方法。Query接口不支持级联删除。
b 没有select关键字的HQL查询
面向对象的查询语言,表名换类名,列名换类中字段。一般分为带占位符“?”和带命名参数两种。
c 批处理
Hibernate 3.0之后,Query接口中可以使用delete、update执行批量删除更新。
d 投影查询
带select关键字的HQL查询,查询得到的都是一些零散数据。
投影查询支持所有复杂的查询(子查询、多表、分组......)。
按照查询出结果分不同情况处理,如下面所示:
情况1: 单行单列值
Object o=query.uniqueResult();
情况2: 单行多列值
Object[] arr=(Object[])query.uniqueResult();
情况3: 多行单列值
- 上一篇:ASP.net+sqlserver招聘平台企业用户子系统设计
- 下一篇:基于iOS平台的记单词软件设计与实现
-
-
-
-
-
-
-
乳业同业并购式全产业链...
酸性水汽提装置总汽提塔设计+CAD图纸
中考体育项目与体育教学合理结合的研究
大众媒体对公共政策制定的影响
河岸冲刷和泥沙淤积的监测国内外研究现状
电站锅炉暖风器设计任务书
java+mysql车辆管理系统的设计+源代码
当代大学生慈善意识研究+文献综述
杂拟谷盗体内共生菌沃尔...
十二层带中心支撑钢结构...