hibernate一对多和多对一的整理:《例》部门与员工

本文介绍了Hibernate框架下的一对多和多对一关系映射,以部门与员工为例。员工与部门的关系是多对一,部门与员工是一对多。通过映射文件配置,包括集合属性、外键字段和关联类的指定,详细阐述了如何在实体类和表间建立正确的关联。在部门实体中,使用`<set>`、`<key>`和`<many-to-one>`标签,在员工实体中,使用`<one-to-many>`标签进行映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       每次遇到这种表与表间的关系时,脑子里就是一团乱麻,这回又用hibernate框架时,我就只知道单表映射生成文件,涉及到关系就懵逼了,而且表间关系又是重点,就不得不又拿起来啃啃看:

        hibernate框架的总配置文件中涉及到的都是初始化的东西,也就是

                             1,configuration对象的相关初始化(数据库连接参数操作《数据库方言》)

                             2,hibernate常用的相关参数hibernateProperties,显示sql《show_sql》,显示sql格式,以及自动建表《hbm2ddl.auto》等参数设置

                             3,*.hbm.xml文件的映射

  先不管它怎么搭建,今天就是想把一对多和多对一理一理;

                 《例》员工与部门之间的关系: 员工--->部门  是多对一的关系;(我这里总是把它看成“一对一”(不知道说不说的通   此处求教育)  虽然很明显是:多个员工对应一个部门 )

                                                                         部门--->员工  是一对多的关系;

                   首先设计它们对应的表:

                                       

t_dept
deptIddeptName
1设计部
2研发部

t_employee
empIdempNamesalarydept_id
1张三123452
2李四789862

数据库表有了,再对对应的模型进行编写:

模型不单单有模型的属性------>表的字段(a,基本的属性要确实的在表上生成具体能看到的字段;b,表示表间关系的属性在具体的表中不能直接看到的)《非主流片面个人理解》

                                                                                                      

             对应的实体类写好了,然后就是关键部分 映射文件:

                          首先仅考虑在部门Dept方对关联表进行操作:( 普通字段的生成就不关注了)

                                               1,指定需要映射的集合属性:emps;

2,集合属性对应的集合表:t_employee;<指向库中的表>

3,集合表的外键字段:t_employee .dept_id;

4,集合元素的类型:Employee;

                                  <set  name="emps"    table="t_employee">

 <key  column="dept_id">  </key>           / /实现两表的关系

<many-to-one  class="Employee(路径)" />   / / 这样才能实现从部门方来维护到员工方;<注意>在该表形成前,employee表已经生成了,且在sql运行语句中,先是在employee中insert数据(此时外键字段为null),然后Dept中插入数据,再用update进行关系的维护。

</set>

                      再考虑员工方Employee:

1,指定要映射的属性;dept

2,本表的外键字段:dept_id 

3.部门类型;

                            同上分析:<one-to-many  name="dept"  class="Dept" column="dept_id' /> 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值