Hibernate_映射_关联关系_一对多多对一映射2、inverse属性
来源:互联网 发布:经济数据库都有什么 编辑:程序博客网 时间:2024/05/22 07:59
值类型的集合集合元素是普通类型实体类型的集合集合元素是另外一个实体一对多 多对一Department.hbm.xmlEmployee.hbm.xml要说明的信息有:要说明的信息有:1,集合表(员工表)1,关联的是什么类型2,集合外键2,外键列3,集合元素 关联的实例类型package cn.itcast.f_hbm_oneToMany;import java.util.HashSet;import java.util.Set;/** * 部门 * * @author 风清杨 * @version V3.0 * */public class Department {/** 部门id */private Integer id;/** 部门名称 */private String name;/** 员工信息 */private Set employee = new HashSet ();// 关联的很多员工public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set getEmployee() {return employee;}public void setEmployee(Set employee) {this.employee = employee;}@Overridepublic String toString() {return "Department [id=" + id + ", name=" + name + "]";}}package cn.itcast.f_hbm_oneToMany;/** * 员工部门 * * @author 风清杨 * @version V3.0 * */public class Employee {/** 员工编号 */private Integer id;/** 员工姓名 */private String name;/** 员工部门 */private Department department;// 关联的部门对象public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Department getDepartment() {return department;}public void setDepartment(Department department) {this.department = department;}@Overridepublic String toString() {return "Employee [id=" + id + ", name=" + name + "]";}}package cn.itcast.f_hbm_oneToMany;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;/** * 应用程序操作类 * * @author 风清杨 * @version V3.0 * */public class App {private static SessionFactory sessionFactory = new Configuration()//.configure()//.addClass(Department.class)//.addClass(Employee.class)//.buildSessionFactory();// 保存,有关联关系@Testpublic void testSave() throws Exception {Session session = sessionFactory.openSession();Transaction tx = null;try {tx = session.beginTransaction();// ------------------------------------// 新建对象Department department = new Department();department.setName("开发部");Employee employee1 = new Employee();employee1.setName("张三");Employee employee2 = new Employee();employee2.setName("李四");// 关联起来employee1.setDepartment(department);employee2.setDepartment(department);department.getEmployee().add(employee1);department.getEmployee().add(employee2);// 保存session.save(department);session.save(employee1);session.save(employee2);// ------------------------------------tx.commit();} catch (RuntimeException e) {tx.rollback();throw e;} finally {session.close();}}// 获取,可以获取到关联的对方@Testpublic void testGet() throws Exception {Session session = sessionFactory.openSession();Transaction tx = null;try {tx = session.beginTransaction();// ------------------------------------// 获取一方数据,并显示另一方信息//Department department = (Department) session.get(Department.class,// 1);// System.out.println(department);// System.out.println(department.getEmployee());Employee employee = (Employee) session.get(Employee.class, 1);System.out.println(employee);System.out.println(employee.getDepartment());// ------------------------------------tx.commit();} catch (RuntimeException e) {tx.rollback();throw e;} finally {session.close();}}}
维护关联关系:就是设置外键列的值。
<!-- employee属性,Set集合,表达的是本类与Employee的一对多关系 class属性:关联的实体类型key子元素:对方表中的外键列(多方的那个表)inverse属性:默认为false,表示本方维护关联关系。如果为true,表示本方不维护关联关系。只是影响是否能设置外键的值(设成有效值或者是null值),对获取信息没有影响--><set name="employee" inverse="false"><key column="departmentId" /><one-to-many class="Employee" /></set>
// 解除关联关系@Testpublic void testRemoveRelation() throws Exception {Session session = sessionFactory.openSession();Transaction tx = null;try {tx = session.beginTransaction();// ------------------------------------// 从员工解除// Employee employee = (Employee) session.get(Employee.class, 1);// employee.setDepartment(null);// 从部门解除(与inverse有关系,为false时可以解除)Department department = (Department) session.get(Department.class,1);department.getEmployee().clear();session.update(department);// ------------------------------------tx.commit();} catch (RuntimeException e) {tx.rollback();throw e;} finally {session.close();}}// 删除对象,对关联对象的影响@Testpublic void testDelete() throws Exception {Session session = sessionFactory.openSession();Transaction tx = null;try {tx = session.beginTransaction();// ------------------------------------// 删除员工方(多方)对对方没有影响// Employee employee = (Employee) session.get(Employee.class, 2);// session.delete(employee);// 删除部门方(一方)// a,如果没有关联的员工:// b,如果有关联的员工且inverse=true,由于不能维护关联关系,所以会直接执行删除,就会有异常。// c,如果有关联的员工且inverse=false,由于可以维护关联关系,它就会先把关联的员工的外键列设为null值,再删除自已。Department department = (Department) session.get(Department.class,1);// department.getEmployee().clear();session.delete(department);// ------------------------------------tx.commit();} catch (RuntimeException e) {tx.rollback();throw e;} finally {session.close();}}
0 0
- Hibernate_映射_关联关系_一对多多对一映射2、inverse属性
- Hibernate_映射_关联关系_一对多多对一映射1
- Hibernate_映射_关联关系_cascade属性、单向关联
- Hibernate_映射_关联关系_多对多映射2
- Hibernate_映射_关联关系_多对多映射1
- Hibernate_映射_关联关系_一对一映射2_基于外键的方式
- Hibernate_一对多_多对一_双向关联
- Hibernate_映射_关联关系_一对一映射1__映射基础
- Hibernate_映射_关联关系_一对一映射3_基于主键的方式
- Hibernate关系映射(2)_一对一双向外键关联
- Hibernate关系映射(7)_多对一单向关联
- Hibernate关联关系映射_单边多对一
- Hibernate关联关系映射_多对一双边
- Hibernate关系映射(8)_一对多单向关联
- Hibernate关联关系映射_单边一对多
- Hibernate_多对一单向关联_一对多单向关联
- Hibernate之关联关系映射(一对多和多对一映射,多对多映射)
- Hibernate关联关系映射 一对一 一对多 多对一
- Linux I/O复用——select系统调用
- linux配置禁止密码登陆,普通用户赋予sudo权限
- 如何把Bootstrap和JQuery在不能上网环境中生效并用Maven来管理版本?
- spring源码-6-springmvc
- Swift3 实现图片圆角、阴影、边框
- Hibernate_映射_关联关系_一对多多对一映射2、inverse属性
- 写在caffe2 的开始
- 僵尸进程&孤儿进程
- 根据Map的value排序
- scrapy random user agents
- MySQL 处理海量数据时的一些优化查询速度方法
- scrapy polipo
- VMwarePlayer12.5安装虚拟机网络设置互通笔记
- 高斯判别分析模型The Gaussian Discriminant Analysis model