标签:
一对多、多对一这种关系在现实生活中很多,例如部门与员工的关系,学校里班级与学生的关系...
那么在具体的系统实现中如果i实现这种关联关系呢?这里以部门和员工的关系为例。
部门实体类
package test.hibernate.hbmOneToMany;
import java.util.HashSet;
import java.util.Set;
public class Department {
private Integer id;
private String name;
private Set<Employee> employees = new HashSet<Employee>();
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<Employee> getEmployees() {
return employees;
}
public void setEmployees(Set<Employee> employees) {
this.employees = employees;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "[employee:id=" + id + ",name=" + name + "]";
}
}
员工实体类
package test.hibernate.hbmOneToMany;
public class Employee {
private Integer id;
private String name;
private Department department=new 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;
}
}
部门映射Department.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="test.hibernate.hbmOneToMany">
<class name="Department" table="department">
<id name="id" type="integer" column="id">
<generator class="native" />
</id>
<property name="name"/>
<set name="employees">
<key column="departmentId"></key>
<one-to-many class="Employee" />
</set>
</class>
</hibernate-mapping>
员工映射文件Employee.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="test.hibernate.hbmOneToMany">
<class name="Employee" table="employee">
<id name="id" type="integer" column="id">
<generator class="native" />
</id>
<property name="name"/>
<many-to-one name="department" class="Department" column="departmentId"></many-to-one>
</class>
</hibernate-mapping>
测试类App
package test.hibernate.hbmOneToMany;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
public class App {
private static SessionFactory sessionFactory = new Configuration()//
.configure()//
.addClass(Department.class)// 添加Hibernate实体类(加载对应的映射文件)
.addClass(Employee.class)//
.buildSessionFactory();
@Test
public void testSave() throws Exception {
Session session = sessionFactory.openSession();
session.beginTransaction();
// --------------------------------------------
// 构建对象
Department department = new Department();
department.setName("开发部");
Employee employee = new Employee();
employee.setName("张三");
Employee employee2 = new Employee();
employee2.setName("李瑟");
// 关联起来
employee.setDepartment(department);
employee2.setDepartment(department);
department.getEmployees().add(employee);
department.getEmployees().add(employee2);
// 保存
session.save(department);
session.save(employee);
session.save(employee2);
// --------------------------------------------
session.getTransaction().commit();
session.close();
}
// 获取到部门关联的员工
@Test
public void testGet() throws Exception {
Session session = sessionFactory.openSession();
session.beginTransaction();
// 获取数据
Department department = (Department) session.get(Department.class, 1);
System.out.println(department.getId());
System.out.println(department.getName());
System.out.println(department.getEmployees());
session.getTransaction().commit();
session.close();
}
// 删除部门及对员工的影响
public void testDelete() throws Exception {
Session session = sessionFactory.openSession();
session.beginTransaction();
// --------------------------------------------
// 构建对象
// --------------------------------------------
session.getTransaction().commit();
session.close();
}
}
原文出处:http://blog.csdn.net/lindonglian/article/details/46906487
版权声明:本文为博主原创文章,未经博主允许不得转载。如需转载,请注明出处:http://blog.csdn.net/lindonglian
标签:
原文地址:http://blog.csdn.net/lindonglian/article/details/46906487