首页 > 代码库 > Hibernate多对一装备
Hibernate多对一装备
hibernate中的多对一装备有两种状况:
一种是子表的外键对应主表的主键id。
另一种是子表的外键对应主表的非主键字段,通常是一个仅有的字段。(常见的场景是订单主表跟订单产品明细表,主表跟子表都是用id作为主键,可是两者之间通过orderNo(订单号)来相关)
下面依据这两种状况,简略介绍一下号码大全hibernate映射文件的装备。
第一种状况,假设主表是部分表(department),关键词挖掘工具表是职工表(employee)。
domain类如下:
Java代码 保藏代码
国医一号 http://www.tdhzp.com
临沂批发网 http://www.shoudashou.com
package com.xigua.domain;
public class Department {
/**
* 主键id
*/
private Long id;
/**
* 部分称号
*/
private String departName;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDepartName() {
return departName;
}
public void setDepartName(String departName) {
this.departName = departName;
}
}
Java代码 保藏代码
package com.xigua.domain;
/**
* 职工
* @author Administrator
*
*/
public class Employee {
/**
* 主键id
*/
private Long id;
/**
* 职工称号
*/
private String empName;
/**
* 部分目标
*/
private Department department;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
}
对应的hibernate映射文件如下:
Xml代码 保藏代码
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"D:\tools\hibernate\dtd\hibernate-mapping-3.0.dtd">
Xml代码 保藏代码
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"D:\tools\hibernate\dtd\hibernate-mapping-3.0.dtd">
通过上述的装备以后,就将Employee跟Department进行了多对一绑定了。
可敲下面的代码验证:
Java代码 保藏代码
package com.xigua.test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.xigua.domain.Department;
import com.xigua.domain.Employee;
import com.xigua.utils.HibernateUtil;
public class Test1 {
public static void main(String args[]) {
save();
query();
}
public static void save() {
Session session = null;
Transaction tx = null;
try{
session = HibernateUtil.getSession();
tx = session.beginTransaction();
Department depart = new Department();
depart.setDepartName("dev");
Employee emp1 = new Employee();
emp1.setEmpName("xigua1");
// 级联保留职工的部分
emp1.setDepartment(depart);
session.save(depart);
session.save(emp1);
tx.commit();
}catch(Exception e) {
if(tx != null) {
tx.rollback();
}
throw e;
}finally {
if(session != null) {
session.close();
}
}
}
public static void query() {
Session session = null;
try{
session = HibernateUtil.getSession();
Employee emp = (Employee) session.get(Employee.class, 1L);
System.out.println(emp.getEmpName());
// 级联检查职工对应的部分
Department depart = emp.getDepartment();
System.out.println(depart.getDepartName());
}catch(Exception e) {
throw e;
}finally {
if(session != null) {
session.close();
}
}
}
}
假如想在Department目标中也绑定一对多联系,则需求修改Department.java类跟对应的hibernate映射文件。
Department.java类中增加一个Set调集目标,对应的hibernate文件中也装备一个标签,详细见下面的代码。
增加Set调集目标后的Department.java类:
Java代码 保藏代码
package com.xigua.domain;
import java.util.Set;
public class Department {
/**
* 主键id
*/
private Long id;
/**
* 部分称号
*/
private String departName;
/**
* set调集 存在该部分下的职工信息
*/
public Setemps;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDepartName() {
return departName;
}
public void setDepartName(String departName) {
this.departName = departName;
}
public SetgetEmps() {
return emps;
}
public void setEmps(Setemps) {
this.emps = emps;
}
}
Hibernate多对一装备