[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类
public 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类
public 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
二、简单测试
public 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