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;
}

}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。