Hibernate-关联关系映射

Employee.java

package hibch05.entity;

import java.util.HashSet;
import java.util.Set;

public class Employee {
    private Integer empid;

    public Integer getEmpid() {
        return empid;
    }

    public void setEmpid(Integer empid) {
        this.empid = empid;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public Set<Project> getProjects() {
        return projects;
    }

    public void setProjects(Set<Project> projects) {
        this.projects = projects;
    }

    private String ename;
    private Set<Project> projects = new HashSet<Project>();
}

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="hibch05.entity.Employee" table="employee"
        schema="scott">
        <id name="empid" type="java.lang.Integer" column="empid">
            <generator class="sequence">
                <param name="sequence">seq_id</param>
            </generator>
        </id>
        <property name="ename" column="ename" />
        <set name="projects" table="r_pro_emp" inverse="true">
           <key column="employeeId"/>
           <many-to-many class="hibch05.entity.Project" column="projectId"/>
        </set>
    </class>
</hibernate-mapping>

project.java

package hibch05.entity;

import java.util.HashSet;
import java.util.Set;

public class Project {
    private Integer proid;
    private String proname;
    private Set<Employee> employees = new HashSet<Employee>();

    public Integer getProid() {
        return proid;
    }

    public void setProid(Integer proid) {
        this.proid = proid;
    }

    public String getProname() {
        return proname;
    }

    public void setProname(String proname) {
        this.proname = proname;
    }

    public Set<Employee> getEmployees() {
        return employees;
    }

    public void setEmployees(Set<Employee> employees) {
        this.employees = employees;
    }
}

Project.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="hibch05.entity.Project" table="project" schema="scott">
        <id name="proid" type="java.lang.Integer">
            <column name="proid" />
            <generator class="sequence">
                <param name="sequence">seq_id</param>
            </generator>
        </id>
        <property name="proname" column="proname"/>
        <set name="employees" table="r_pro_emp" cascade="save-update">
          <key column="projectId"/>
          <many-to-many class="hibch05.entity.Employee" column="employeeId"/>
        </set>



    </class>
</hibernate-mapping>

Test.java

package junit.test;

import static org.junit.Assert.*;
import hibch05.dao.HibernateSessionFactory;
import hibch05.entity.Employee;
import hibch05.entity.Project;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

public class Ch05Test {

    @Test
    public void test() {
        Employee emp=new Employee();
        emp.setEname("张三");
        Employee emp2=new Employee();
        emp2.setEname("李四");
        Employee emp3=new Employee();
        emp3.setEname("王五");

        Project prj=new Project();
        prj.setProname("南水北调");
        Project prj2=new Project();
        prj2.setProname("西气东输");
        Project prj3=new Project();
        prj3.setProname("三峡工程");
        //设置员工所参与的项目
        emp.getProjects().add(prj);
        emp.getProjects().add(prj3);

        emp2.getProjects().add(prj2);

        emp3.getProjects().add(prj2);
        emp3.getProjects().add(prj3);
        //设置项目有哪些员工参加
        prj.getEmployees().add(emp);

        prj2.getEmployees().add(emp2);
        prj2.getEmployees().add(emp3);

        prj3.getEmployees().add(emp);
        prj3.getEmployees().add(emp3);

        Session session=HibernateSessionFactory.getSession();
        session.save(prj);
        session.save(prj2);
        session.save(prj3);
        session.beginTransaction().commit();//提交事务

    }

    public void test2(){
        Session session=HibernateSessionFactory.getSession();

        Project pro=new Project();
        pro.setProname("三峡工程");

        Project pro2=new Project();
        pro2.setProname("南水北调工程");

        Employee emp=new Employee();
        emp.setEname("小胖");

        Employee emp2=new Employee();
        emp2.setEname("大胖");

        Employee emp3=new Employee();
        emp3.setEname("二胖");

        //添加工程项目到员工的信息中
        emp.getProjects().add(pro);
        emp2.getProjects().add(pro);
        emp2.getProjects().add(pro2);
        emp3.getProjects().add(pro2);

        //添加员工信息到工程项目中
        pro.getEmployees().add(emp);
        pro.getEmployees().add(emp2);
        pro2.getEmployees().add(emp2);
        pro2.getEmployees().add(emp3);

        Transaction tx=session.beginTransaction();
        session.save(pro);
        session.save(pro2);
        tx.commit();
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunywz

~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值