标签:资源 毛主席 equals 映射 man actor table hashset one
业务模型:
描述员工和项目
一个员工同时可以参与多个项目
一个项目中可以包含多个员工
分析:数据库的数据模型,通过中间关系表,建立两个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 @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 @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 /**
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 /***
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 }
标签:资源 毛主席 equals 映射 man actor table hashset one
原文地址:http://www.cnblogs.com/guanghe/p/6097204.html