hibernate一对多的实现

首先我想说,不管是多对一还是一对多,他们的共同点就是两张表有联系。实现的实质就是通过找共同属性的字段(可以不同名字,但是在关联时候,类型是一致的)。


如果是员工表和部门表的话,那么我们可以通过部门编号来实现。


 


下面我写一个查找一个部门有多少人实例来说明1对多的实现方式。


1.      部门对象映射类


package com.fish.testdao;


 


import java.util.Set;


 


public class Department{


private Integer id;


private String name;


private Set<Employee> employee;//利用这个我们可以将一个部门的所有员工放到这个集合,到时候我们只要遍历这个集合我们就知道一个部门都有谁了。


 


public Set<Employee> getEmployee() {


    return employee;


}


public void setEmployee(Set<Employee> employee) {


    this.employee = employee;


}


public Integer getId() {


    return id;


}


public void setId(Integer id) {


    this.id = id;


}


public String getName() {


    return name;


}


public void setName(String name) {


    this.name = name;


}


 


}


 


2.      员工对象映射类


 


package com.fish.testdao;


 


public class Employee {


private Integer id;


private String name;


private Department department;//这个在这里做外键


public Integer getId() {


    return id;


}


public void setId(Integer id) {


    this.id = id;


}


public String getName() {


    return name;


}


public void setName(String name) {


    this.name = name;


}


public Department getDepartment() {


    return department;


}


public void setDepartment(Department department) {


    this.department = department;


}


 


}


3.      部门xml


<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE hibernate-mapping PUBLIC


    "-//Hibernate/HibernateMapping DTD 3.0//EN"


    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


 


<hibernate-mapping>


    <class name="com.fish.testdao.Department">


       <id name="id" type="integer">


           <generator class="increment"></generator>


       </id>


       <property name="name"></property>


       <set name="employee">


           <key column="department"></key>


           <one-to-many class="com.fish.testdao.Employee"/>


       </set>


    </class>


</hibernate-mapping>    


*注<set name="employee">说明这个集合要封装的是部门类中的set属性叫employee和类的属性是一致的


           <keycolumn="department"></key> //关联的是员工表的这个属性


           <one-to-manyclass="com.fish.testdao.Employee" />  //操作的是员工表


       </set>


 


4.       员工xml


<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE hibernate-mapping PUBLIC


    "-//Hibernate/HibernateMapping DTD 3.0//EN"


    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


 


<hibernate-mapping>


    <class name="com.fish.testdao.Employee" >


       <id name="id" column="id"type="integer">


           <generator class="increment"></generator>


       </id>


       <property name="name" ></property>


       <many-to-one name="department"   ></many-to-one>


    </class>


</hibernate-mapping>


 


 


我们写一个测试类


package com.fish.domain;


 


import java.util.List;


 


import org.hibernate.Query;


import org.hibernate.Session;


import org.hibernate.SessionFactory;


import org.hibernate.cfg.Configuration;


 


import com.fish.testdao.Department;


import com.fish.testdao.Employee;


 


public class Test2 {


    //写一个得到session的模板


    public static Session getMySession() {


       Configuration configuration = new Configuration();


       configuration.configure("hibernate.cfg.xml");


       SessionFactory factory = configuration.buildSessionFactory();


       Session session = factory.openSession();


       return session;


    }


//这是一个对部门有多少员工的查找


    public static void query() {


       String hql = "fromDepartment";


       Session session = getMySession();


       Query query = session.createQuery(hql);


       List<Department> list = query.list();


       for (Department i : list) { 


           System.out.println(i.getName()+"有");


              for(Employee j:i.getEmployee()){


              System.out.print( j.getName());


              }


              System.out.println("");


              System.out.println("");


       }


       }


    public static void main(String[] args) {


       query();


}


}


 


原帖地址 : http://www.2cto.com/kf/201308/234799.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值