Hibernate one to many(many to one)(转)

和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());

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值