Hibernate一对多与多对一关系映射

运用部门与员工之间的关系

部门(Department)中有三属性,设置get和set方法

   private int did;
private String dname;
private Set<Employee> emps;


员工(Employee)也有三个属性,分别生成get和set方法
private int eid;
private String ename;
private Department depart;


[size=medium]部门类的xml文件映射(Department.hbm.xml)[/size]

<class name="com.cao.po.Department" table="depart">
<id name="did">
<generator class="native" />
</id>
<property name="dname"/>
<!-- 映射set集合,key标签用于指定多段外键列名,需要和多端配置的many-to-one标签的列名一致 -->
<set name="emps">
<key column="depart_ids"/>
<!-- class属性用于指定集合内的类型,因为在类中定义用了泛型,所以此处也可不进行指定 -->
<one-to-many class="com.cao.po.Employee"/>
</set>
</class>



[size=medium]员工类的xml文件映射配置(Employee.hbm.xml)[/size]


<class name="com.cao.po.Employee" table="emp">
<id name="eid">
<generator class="native" />
</id>
<property name="ename"/>

<!-- 配置多对一关系,hibernate会根据name的值去实体类中找其定义的类型(此处Department depart),
然后根据其类型找该类所对应的配置文件Department.hbm.xml,建立关系,
默认的该列引用一端的id属性列作为外键值,如果想自己指定可以在标签里配置property-ref="指定的列";
-->
<many-to-one name="depart" column="depart_id" />
</class>



[size=medium]简单的添加操作[/size]


public static void add(){
Session session = HibernateUtil.getSession();
Transaction ts = HibernateUtil.getTs();

Department depart = new Department();
depart.setDname("depart1");

Employee emp1 = new Employee();
//emp和depart建立关系,如果不设置对应的外键值为空
emp1.setEname("emp1");
emp1.setDepart(depart);
Employee emp2 = new Employee();
emp2.setEname("emp2");
emp2.setDepart(depart);

//如果同时在一端也进行关系维护的话,会生成两天update语句,如果想取消一端的维护的话可以配置inverse属性
Set<Employee> eset = new HashSet<Employee>();
eset.add(emp1);
eset.add(emp2);
depart.setEmps(eset);

/*
* 必须对部门实体进行保存,因为员工表对部门表进行了引用,
* 保存时间可以早于emp,也可晚于emp,但是要在commit之前
* 两种情况会生成不同的sql语句,当保存emp早于depart时,会生成3条insert语句和2条update语句,
* 两条update语句是更新emp表的外键,因为在保存emp时depart的id为空,当再保存depart时,因为
* emp为持久化对象,所以其对应的引用值也会改变
*
* 当保存depart在emp之前是只生成3条insert语句
*/
session.save(depart);
session.save(emp1);
session.save(emp2);

ts.commit();
session.close();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
Hibernate是一个Java持久化框架,它能够将Java对象映射到数据库中的表格,同时支持各种关系数据库,如MySQL、Oracle等。在Hibernate中,对于一对一、一对多和多对多的关系,我们可以通过以下方式进行映射。 一对一关系:在Hibernate中,可以通过主键关联和外键关联来实现一对一关系映射。主键关联是指两个实体之间的关联通过主键来进行,可以使用@PrimaryKeyJoinColumn注解将两个实体关联起来。外键关联是指通过一个实体引用另一个实体的主键作为外键,使用@JoinColumn注解来指定外键属性。 一对多关系:在Hibernate中,一对多关系通常通过外键关联来实现。在一的一方,使用@OneToMany注解来定义一对多关系,同时使用@JoinColumn注解指定外键属性。在多的一方,使用@ManyToOne注解来定义多对一关系,并使用@JoinColumn注解指定外键属性。 多对多关系:在Hibernate中,多对多关系通常通过中间表来实现。在多对多的两个实体中,使用@ManyToMany注解来定义多对多关系。同时,需要在中间表中创建两个外键,分别与两个实体的主键关联,并使用@JoinTable注解来指定中间表的表名和两个外键的列名。 总结:通过Hibernate的注解方式,可以方便地实现一对一、一对多和多对多关系映射。通过合理地使用注解,可以减少编写映射文件的工作量,提高开发效率。同时,Hibernate还提供了在运行时自动生成表结构的功能,可以根据Java实体类来动态创建或更新对应的数据库表格,从而提高系统的可维护性和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值