双向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 @Test12 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 }