关联映射-----一对多小实例

一对一多关联映射实现
本文介绍了使用Java和Hibernate框架实现一对一多关联映射的方法,包括实体类设计、配置文件编写以及具体操作流程。
 

关联映射-----一对多小实例

Employee.java

package com.hbsi.domain;

//员工类

public class Employee {

 

    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;

    }

}

 

Employee.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

 

<hibernate-mapping

    package="com.hbsi.domain">

 

    <class name="Employee" table="employee">

       <id name="id" column="id">

           <generator class="native"/>

       </id>

       <property name="name"/>

    </class>

</hibernate-mapping>

 

Department.java

package com.hbsi.domain;

 

import java.util.Set;

 

//部门

public class Department {

 

    private int id;

    private String name;

    //增加的集合属性,一对多

    private Set<Employee> emps;

   

    public Set<Employee> getEmps() {

       return emps;

    }

    public void setEmps(Set<Employee> emps) {

       this.emps = emps;

    }

    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;

    }

}

 

Department.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

 

<hibernate-mapping

    package="com.hbsi.domain">

 

    <class name="Department" table="department">

       <id name="id" column="id">

       <!-- native自动增长   根据不同的底层数据库选择产生不同的策略 -->

           <generator class="native"/>

       </id>

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

      

       <!-- 类里面的集合属性的体现,这个集合属性反应的是一对多 -->

           <!-- key  查询员工表时参照的列 -->

       <set name="emps" >

           <key column="depart_id"></key>

           <one-to-many class="Employee"/>

       </set>

    </class>

</hibernate-mapping>

 

OneToMany.java

package com.hbsi.test;

 

import java.util.HashSet;

import java.util.List;

import java.util.Set;

 

import org.hibernate.Session;

import org.hibernate.Transaction;

 

import com.hbsi.domain.Department;

import com.hbsi.domain.Employee;

import com.hbsi.hibernate.utils.HibernateUtil;

 

public class OneToMany {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

       // TODO Auto-generated method stub

 

       add();

       query(1);

      

    }

    //能否正确插入,查询

    //添加相应的信息

    static Department add(){

       Session s=null;

       Transaction tx=null;

       try{

           s=HibernateUtil.getSession();

           tx=s.beginTransaction();

          

           //增加部门,员工

           Department dep=new Department();

           dep.setName("部门一");

          

           Employee e1=new Employee();

           e1.setName("Tom");

          

          

           Employee e2=new Employee();

           e2.setName("dddd");

          

          

           Employee e3=new Employee();

           e3.setName("aaa");

          

          

           Set<Employee> set=new HashSet<Employee>();

           set.add(e1);

           set.add(e2);

           set.add(e3);

           dep.setEmps(set);//做对象之间的关联,告诉部门有哪些员工

 

           s.save(e1);

           s.save(e2);

           s.save(e3);

          

           tx.commit();

          

           return dep;

       }finally{

           if(s!=null){

              s.close();

           }

       }

    }

   

    //通过部门id查找与它相关联的员工

    static Department query(int deptId){

       Session s=null;

 

       try{

           //查询

           s=HibernateUtil.getSession();

           Department d=(Department) s.get(Department.class, deptId);

          

           System.out.println(d.getName()+"有"+d.getEmps().size()+"个员工,分别为:");//集合里面有多少个元素

      

           //遍历出所有符合的员工

          

          

           Set<Employee> list=d.getEmps();

      

           for(Employee entities:list){

              System.out.println(entities.getName());

           }

           return d;

       }finally{

           if(s!=null){

              s.close();

           }

       }

    }

   

}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值