Hibernate one to many(many to one) 配置

本文详细阐述了一对一映射关系在实体类间的实现方式,通过使用Hibernate框架,介绍了Department和Employee实体类的映射配置,并提供了具体的XML文件示例,以及如何在服务类中获取员工信息并显示部门位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

和one to one 一样,首先写了两个实体类Department(private int deptid;private String dname;private String location; 
private Set<Employee> employees;)和Employee(private int empid;private String ename;private Department dept;)生成get,set方法, 
然后同样配置实体类的映射文件Department.hbm.xml和Employee.hbm.xml。 
代码: 
----------Department.hbm.xml 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > 
<hibernate-mapping> 
<class name="cn.hdu.entity.Department" table="DEPARTMENT"> 
<id name="deptid" column="DEPTID"> 

<generator class="sequence"><param name="sequence">dept_sequence</param></generator> 
</id> 

<property name="dname" column="DNAME"></property> 
<property name="location" column="LOCATION"></property> 

<set name="employees" cascade="save-update" lazy="false"> 
<key column="DEPTID"></key> 
<one-to-many class="cn.hdu.entity.Employee"/> 
</set> 

</class> 
</hibernate-mapping> 


-----------Employee.hbm.xml 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > 
<hibernate-mapping> 
<class name="cn.hdu.entity.Employee" table="EMPLOYEE"> 
<id name="empid" column="EMPID"> 

<generator class="sequence"><param name="sequence">emp_sequence</param></generator> 
</id> 

<property name="ename" column="ENAME"></property> 


<many-to-one name="dept" column="DEPTID" class="cn.hdu.entity.Department" lazy="false"></many-to-one> 

</class> 

</hibernate-mapping> 

注意:属性的解释大多同于 one to one例子(详见Hibernate one to one配置),这里面说下为什么要用set:set代表把整个employees对象装入其中, 
之后many to one对应于Department dept.deptid,或者说对应于表Department中DEPTID字段,而one to many代表表Department中DEPTID字段对应于相应的表emplooy一条或者多条记录 
做完映射之后同样不要忘记把映射文件写入hibernate.cfg.xml; 
代码: 
<session-factory> 
......... 
<property name="show_sql">true</property> 
<mapping resource="cn/hdu/entity/Department.hbm.xml" /> 
<mapping resource="cn/hdu/entity/Employee.hbm.xml" /> 
</session-factory> 

其中show_sql ..true;代表执行时输出sql语句。 

之后写一个实现类 
public class ServiceImp  { 
public Employee geteEmployeeByName(String name){ 
Employee employee = new Employee(); 
Session session=HibernateSessionFactory.getSession(); 
Query query=session.createQuery("from Employee 
where ename='"+name+"'"); 
employee=(Employee) query.list().get(0); 
HibernateSessionFactory.closeSession(); 
return employee; 



测试类: 
public class TestDepartment { 
public static void main(String[] args) { 
ServiceImp service = new ServiceImp(); 
Department dept=new Department(); 
Employee emp=new Employee(); 
emp=service.geteEmployeeByName("zhang"); 
System.out.print(emp.getDept().getLocation()); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值