首页 > 代码库 > Hibernate双向多对多对象关系模型映射
Hibernate双向多对多对象关系模型映射
1 双向many-to-many
业务模型:
描述员工和项目
一个员工同时可以参与多个项目
一个项目中可以包含多个员工
分析:数据库的数据模型,通过中间关系表,建立两个one-to-many构成many-to-many
1 create table emp
2 (
3 eno int primary key auto_increment,
4 ename varchar
5 );
6 create table project
7 (
8 pid int primary key auto_increment,
9 pname varchar,
10 );
11 create table relationship
12 (
13 eno int,
14 pid int,
15 );
1.1 描述java的数据模型
1.2进行pojo的映射配置
1.3加载配置文件产生数据库模型
在数据库为两个主外键。
1.4进行CRUD操作
1.4.1 添加员工信息
1 @Test
2 public void testSaveEmp()
3 {
4 Session session = HibernateSessionFactory.getSession();
5 //开启事务
6 Transaction tr = session.beginTransaction();
7 //创建员工对象
8 Emp emp = new Emp();
9 emp.setEname("毛主席");
10 session.save(emp);
11 tr.commit();
12 session.close();
13 }
1.4.2添加项目信息
1 @Test
2 public void testSaveProject()
3 {
4 Session session = HibernateSessionFactory.getSession();
5 //开启事务
6 Transaction tr = session.beginTransaction();
7 //创建员工对象
8 Project p = new Project();
9 p.setPname("渡江战役");
10 session.save(p);
11 tr.commit();
12 session.close();
13 }
1.4.3添加项目同时分配员工
新添加项目,将项目分配给已经存在的员工
1 /**
2 * 添加项目数据,分配已有员工
3 * ****/
4 @Test
5 public void saveProjectEmp()
6 {
7 //获得Session
8 Session session=sf.openSession();
9 //开启事务
10 Transaction tr=session.beginTransaction();
11 //创建项目对象
12 Project p= new Project();
13 p.setPname("CRM");
14 //查询员工的对象
15 List<Emp> elist = session.createCriteria(Emp.class).list();
16 //将员工分配给新项目:给中间表插入数据
17 p.setEmps(new HashSet(elist));
18 session.save(p);
19 //提交事务
20 tr.commit();
21 //释放资源
22 session.close();
23 }
1.4.4解除员工和项目的关系
通过员工解除关系的。
1 /***
2 * 解除员工和项目的关系
3 * 删除中间表中的数据
4 * ***/
5 @Test
6 public void deleteProjectEmp()
7 {
8 //获得Session
9 Session session=sf.openSession();
10 //开启事务
11 Transaction tr=session.beginTransaction();
12 //查询员工对象
13 Emp emp = (Emp) session.get(Emp.class, 1);
14 //获得员工参与的所有项目
15 Set<Project> pros=emp.getPros();
16 System.out.println(pros);
17 //查询项目对象
18 Project p=(Project) session.get(Project.class,3);
19 System.out.println(p);
20 /****
21 *
22 * set集合中元素的地址和单条查询获得项目对象的地址一样,所有set集合中的项目对象和
23 * 单条查询获得的项目对象,是同一个对象,所以pros.remove(p),删除了集合中地址和p一样的对象
24 *
25 * *****/
26 //p.equals(obj);
27 //从pros中删除某个项目
28 /***
29 * 现在关系是由员工断开(默认inverse=false)
30 * many-to-many这种情况:保存其中一方的inverse=true
31 * ***/
32 pros.remove(p);//
33 //提交事务
34 tr.commit();
35 //释放资源
36 session.close();
37 }
Hibernate双向多对多对象关系模型映射
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。