hibernate学习笔记12--Hibernate中使用的集合类型

本文详细介绍了Hibernate中处理对象关联关系时的各种集合类型,包括一对一、多对一、一对多、多对多的关系映射,以及在数据库中的表现。重点讨论了bag、list、map和array标签的使用场景和注意事项,强调了set集合作为首选项的原因。同时,通过一个关于类型的小实验,解释了为什么在持久化类中应定义接口而非具体实现类作为属性类型,以避免类型转换异常。
摘要由CSDN通过智能技术生成

关联关系总结:
如何考虑hibernate处理对象之间的关联关系的底层细节时,可以从两方面进行思考
(1)如何将对象之间的关联关系保存到数据库中
(2)如何检索出关联的对象(主语句要看sql)
(映射文件id缺省的情况下)
一对一:1条sql
多对一或是一对多:2条sql
多对多:3条sql

对象集合使用类的一部分
单个属性,来取代一对多(比如只要员工类的名字)
一、set特性:没有顺序,不允许元素重复

表结构:

SQL> desc department; Name Type          Nullable Default Comments ---- ------------- -------- ------- -------- ID   NUMBER(10)                              NAME VARCHAR2(255)                          

SQL> desc employee; Name      Type          Nullable Default Comments --------- ------------- -------- ------- -------- ID        NUMBER(10)                              NAME      VARCHAR2(255)                           DEPART_ID NUMBER(10)                             

映射文件:
<set name="emps" > 
<key column="depart_id"></key><!-- 告诉hibernate按照什么字段检索employee表数据,必须和employee.hbm.xnml中的外键定义一样--> 
<one-to-many class="Employee"></one-to-many> <!--告诉hibernate集合set中装什么类型 --> 
</set>

二、list特性:有顺序的,可以元素重复,但是索引不可重复
在employee表中会由hibernate根据Department.hbm.xml一对多的映射关系添加一字段,用于记录是加入的第几个员工
table employee结构
Name      Type          Nullable Default Comments 
--------- ------------- -------- ------- -------- 
ID        NUMBER(10)                              
NAME      VARCHAR2(255)                           
DEPART_ID NUMBER(10)                              
ORDER_COL NUMBER(10)    Y     
映射文件:
<list name="emps">
<key column="depart_id"/>
<list-index column="order_col"/>因为List是有顺序的,hibernate通过这个标签记录员工是第几个加进来的 
<one-to-many class="Employee" />
</list>
list总结:对于有些时候我们是不需要保存list的加入顺序,因为也会消耗不少的内存资源。
此时不需保存顺序时,可以在映射文件使用bag标签,jdk没有特别与之对应的集合,但是使用了bag标签,domain则必须是list相对应才可使用

三、bag标签必须与list接口对相应

与list的标签时的表结构相比,少了list-index的这一列。从而减少了内存开销
 employee 表结构
Name      Type          Nullable Default Comments
--------- ------------- -------- ------- --------
ID        NUMBER(10)                             
NAME      VARCHAR2(255)                          
DEPART_ID NUMBER(10)                             

映射文件:

<bag name="emps">
<key column="depart_id"/> 
<one-to-
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值