博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate 中多对多关系对象集合的保存
阅读量:7098 次
发布时间:2019-06-28

本文共 3877 字,大约阅读时间需要 12 分钟。

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

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

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.xml配置

Project.hbm.xml配置

 

4 全局配置hibernate.cfg.xml

com.mysql.jdbc.Driver
jdbc:mysql:///day26?useSSL=true
root
root
org.hibernate.dialect.MySQL5Dialect
true
true

 

二、简单测试

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://kshql.baihongyu.com/

你可能感兴趣的文章
【NOIP2007】矩阵取数
查看>>
关于VIM在Win10下的无意义折腾
查看>>
ibatis example Class 使用
查看>>
android的触摸事件(转)
查看>>
springMVC与struts2的区别
查看>>
【DB2数据库在windows平台上的安装】
查看>>
课后作业-阅读任务-阅读笔记-4
查看>>
Yii2数据缓存详解
查看>>
02Scala-函数定义、流程控制、异常处理入门实战
查看>>
jquery,smarty,dedecms的插件思路------dede未实践
查看>>
php pdo错误:SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
查看>>
Team Foundation Server:CodeUI Automation Test 学习笔记4
查看>>
Linux 小知识翻译 - 「cron」
查看>>
docker 一些简略环境搭建及部分链接
查看>>
android studio获取SHA1
查看>>
怎么才能在windows使用git命令
查看>>
Sigar应用
查看>>
从单体架构到微服务的演变之路
查看>>
Valgrind内存泄露检测工具使用初步
查看>>
PDF 补丁丁 0.5.0.2657 发布
查看>>