java hibernate 多对多_[Java教程]hibernate 中多对多关系对象集合的保存

[Java教程]hibernate 中多对多关系对象集合的保存

0 2017-04-27 00:00:37

多对多关系映射和一对多关系映射开发步骤差不多,

例子如下:员工和项目之间的关系,一个员工可以参与多个项目;一个项目可以有多个开发人员参与。因此是多对多的关系。

1 分析数据表

1.1)员工表CREATE TABLE employee(id INT PRIMARY KEY AUTO_INCREMENT,ename VARCHAR(50) NOT NULL);

1.2)项目表CREATE TABLE project(id INT PRIMARY KEY AUTO_INCREMENT,pname VARCHAR(100) NOT NULL,startDate DATE);

1.3)员工和项目关系表CREATE TABLE emp_pro_relation(eid INT,pid INT,FOREIGN KEY (eid) REFERENCES employee(id),FOREIGN KEY (pid) REFERENCES project(id));

2 编写实体类

Employee类

bc91bb04e6e9c61e24c974e4440db8f2.gif

bc91bb04e6e9c61e24c974e4440db8f2.gifpublic class Employee { private int id; private String ename; private Set projects = new HashSet(); public int getId() { return id; } public void setId(int id) { this.id = id; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public Set getProjects() { return projects; } public void setProjects(Set projects) { this.projects = projects; }}

View Code

Project类

bc91bb04e6e9c61e24c974e4440db8f2.gif

bc91bb04e6e9c61e24c974e4440db8f2.gifpublic class Project { private int id; private String pname; private Date startDate = new Date(); private Set employees = new HashSet(); public int getId() { return id; } public void setId(int id) { this.id = id; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public Date getStartDate() { return startDate; } public void setStartDate(Date startDate) { this.startDate = startDate; } public Set getEmployees() { return employees; } public void setEmployees(Set employees) { this.employees = employees; }}

View Code

3 映射配置

Employee.hbm."1.0"?>

Project.hbm."1.0"?>

4 全局配置hibernate.cfg.com.mysql.jdbc.Driverjdbc:mysql:///day26?useSSL=truerootrootorg.hibernate.dialect.MySQL5Dialecttruetrue

二、简单测试

bc91bb04e6e9c61e24c974e4440db8f2.gif

bc91bb04e6e9c61e24c974e4440db8f2.gifpublic void fun1(){ Configuration configuration = new Configuration(); configuration.configure(); SessionFactory sessionFac = configuration.buildSessionFactory(); Session session = sessionFac.openSession(); Transaction bt = session.beginTransaction(); Employee emp1 = new Employee(); emp1.setEname("good1"); Employee emp2 = new Employee(); emp2.setEname("good2"); Employee emp3 = new Employee(); emp3.setEname("nice1"); Employee emp4 = new Employee(); emp4.setEname("nice2"); Project pro1 = new Project(); pro1.setPname("OA"); Project pro2 = new Project(); pro2.setPname("电商"); pro1.getEmployees().add(emp1); pro1.getEmployees().add(emp2); pro1.getEmployees().add(emp3); pro2.getEmployees().add(emp3); pro2.getEmployees().add(emp4); session.save(pro1); session.save(pro2); bt.commit(); session.close(); sessionFac.close(); }

View Code

需要注意的是:在使用一方保存另一方时,可能会有错误。此时需要在保存方配置cascade属性。

本文网址:http://www.shaoqun.com/a/307797.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

Hibernate

0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值