双向one-to-many
描述部门和岗位:一个部门有多个岗位
将单向的one-to-many 和many-to-one合并。
4.1双向的one-to-many数据库模型
1 create table department
2 (
3 did int,
4 dname varchar
5 );
6 create table work
7 (
8 id int,
9 pname varchar,
10 did int,
11 constraint fk_did foreign key(did) references department(did)
12 );
数据库中部门表和员工表构成主外键关系。
4.2产生java中的数据模型
4.3双向one-to-many配置
4.4进行curd操作
4.4.1添加部门信息
1 /**
2 * 增加部门信息
3 * ***/
4 @Test
5 public void addDept()
6 {
7 //获得Session对象
8 Session session=sf.openSession();
9 //开启事务
10 Transaction tr = session.beginTransaction();
11 //创建部门对象
12 Dept dept = new Dept();
13 dept.setDname("研发部");
14 session.save(dept);
15 //提交事务
16 tr.commit();
17 //释放资源
18 session.close();
19 }
4.4.2新增部门和岗位
1 /**
2 * 增加部门信息和岗位信息
3 * 只在双向映射进行inverse的配置
4 * inverse:表示双方由谁维护两者之间的关系
5 * 默认:false 不反转,自己维护
6 * true:表示控制权的反转(交出),由对方进行维护
7 *
8 * one-to-many:处理交给many的一方进行关系的控制。
9 *
10 * ***/
11 @Test
12 public void addDeptPost()
13 {
14 //获得Session对象
15 Session session=sf.openSession();
16 //开启事务
17 Transaction tr = session.beginTransaction();
18 //创建部门对象
19 Dept dept = new Dept();
20 dept.setDname("安慰部22");
21 //创建岗位对象
22 Post p=new Post();
23 p.setPname("逗你玩22");
24 //实现了岗位的级联保存
25 dept.getPosts().add(p);
26 //如果关系进行反转,由岗位进行了控制,建立关系
27 p.setDept(dept);
28 session.save(dept);
29 //提交事务
30 tr.commit();
31 //释放资源
32 session.close();
33 }
4.4.3删除部门信息
1 /**
2 只删除岗位信息,不删除部门信息
3 ****/
4 @Test
5 public void deleteDept2()
6 {
7 //获得Session对象
8 Session session=sf.openSession();
9 //开启事务
10 Transaction tr = session.beginTransaction();
11 //查询部门对象
12 Dept dept = (Dept) session.get(Dept.class, 8);
13 //创建岗位对象
14 Post p=new Post();
15 p.setPid(5);
16 /**
17 * 删除与dept解除关系的post对象
18 * ***/
19 //解除该部门下某个岗位和部门的关系
20 dept.getPosts().remove(p);
21 //提交事务
22 tr.commit();
23 //释放资源
24 session.close();
25 }