六 员工与部门——》多对以关系

关联关系 
多对一关系 
员工与部门的关系 从员工角度 是多对一的关系  那么在员工的实体类中加上部门的属性即可 
package vo.util.bean;
/**
 * 员工类
 * @author Administrator
 *
 */
public class Employee {
    private int id;
    private String name;
    private Department derpartment;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Department getDerpartment() {
		return derpartment;
	}
	public void setDerpartment(Department derpartment) {
		this.derpartment = derpartment;
	}
}

映射文件 
<?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="vo.util.bean">

	<class name="Employee">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<many-to-one name="derpartment" column="depaer_id"/>
	</class>
	
</hibernate-mapping>

部门类 
package vo.util.bean;
/**
 * 部门类
 * @author Administrator
 *
 */
public class Department {
  private int id;
  private String name;
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
}

映射文件
<?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="vo.util.bean">

	<class name="Department">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
	</class>
	
</hibernate-mapping>


测试类
package vo.util.test;

import org.hibernate.Session;
import org.hibernate.Transaction;

import vo.util.HibernateUtil;
import vo.util.bean.Department;
import vo.util.bean.Employee;

public class ManytoOne {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
	
         // add();
          query(1);
	}
    static Department add(){
    	Session session = null;
    	Transaction tx = null;
    	try{
    		session =HibernateUtil.getSession();
    		tx = session.beginTransaction();
    		//…你的代码save,delete,update,get…
    		Department dpart=new Department();
    		dpart.setName("BSM部门");
    		Employee em=new Employee();
    		em.setName("员工许春荣");
    		em.setDerpartment(dpart);
    		session.save(dpart);
    		session.save(em);
    		
    		tx.commit();
    		return dpart;
    	}finally{
    		if(session != null)session.close();
    	} 

    }
    
    static Employee query(int id){
    	Session session=null;
    	
    	try{
    	   session=HibernateUtil.getSession();
    	   Employee em=(Employee)session.get(Employee.class, id);
    	   System.out.println(em.getDerpartment().getName());
    		return em;
    	}finally{
    		if(session != null)session.close();
    	} 

    }
}

总结:根据测试后的结果分析 发现我们可以在查询一个员工的信息,同时也可以把部门的信息给查
找出来,在员工的映射文件中,利用其many-to-one标签 就可以把员工的关系给映射上,在这种多对一的关系的数据录入
时候,必须先录入主实体类的数据,然后才录入从录入实体的数据,如果先录入从实体然后才主实体的数据,会在hibernate
的执行过程中,产生两条插入语句 一条更新语句 一条插入语句是插入的是从实体的值 但是对于其关联关系的那个外键会是空值
然后插入主实体的数据,最后更新其从实体的外键数据,这时的外键数据就是有值的了  但是我们一般在设计的时候,一般规定
外键关系是不能为空的,那么这样操作会报非空异常错误 



end 完毕!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值