hibernate多对多映射

来源:互联网 发布:plsql导入表数据库 编辑:程序博客网 时间:2024/05/02 00:17

需求:在员工和权限的设置权衡上,员工和权限都是多对多的关系。

员工和权限两张表
Employee.java

package com.ssh.entities;import java.util.HashSet;import java.util.Set;public class Employee {    private Integer id;    private String name;    private String pwd;    private Integer money;    private String role; //角色    private String remark;    //权限的集合    private Set<Privilege> privileges = new HashSet<Privilege>();    public Employee() {        super();    }    public Employee(String name, String pwd, Integer money, String role, String remark) {        super();        this.name = name;        this.pwd = pwd;        this.money = money;        this.role = role;        this.remark = remark;    }    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 String getPwd() {        return pwd;    }    public void setPwd(String pwd) {        this.pwd = pwd;    }    public Integer getMoney() {        return money;    }    public void setMoney(Integer money) {        this.money = money;    }    public String getRole() {        return role;    }    public void setRole(String role) {        this.role = role;    }    public String getRemark() {        return remark;    }    public void setRemark(String remark) {        this.remark = remark;    }    public Set<Privilege> getPrivileges() {        return privileges;    }    public void setPrivileges(Set<Privilege> privileges) {        this.privileges = privileges;    }}

Employee.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2015-4-22 11:04:17 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping>    <class name="com.ssh.entities.Employee" table="EMPLOYEE">        <id name="id" type="java.lang.Integer">            <column name="ID" />            <generator class="native" />        </id>        <property name="name" type="java.lang.String">            <column name="NAME" />        </property>        <property name="pwd" type="java.lang.String">            <column name="PWD" />        </property>        <property name="money" type="java.lang.Integer">            <column name="MONEY" />        </property>        <property name="role" type="java.lang.String">            <column name="ROLE" />        </property>        <property name="remark" type="java.lang.String">            <column name="REMARK" />        </property>        <set name="privileges" table="EMPLOYEE_PRIVILEGE" >            <key column="employeeId"></key>            <many-to-many class="com.ssh.entities.Privilege" column="privilegeId"></many-to-many>        </set>    </class></hibernate-mapping>

注意:Employee.hbm.xml中通过inverse=”false”来设置关联关系由employee维护,true代表放弃维护,Employee和Privilege只能有一个将inverse字段设置成false。

Privilege.java

package com.ssh.entities;

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

/**
* 权限类
*/
public class Privilege {
private Integer id;
private String name; // 权限名称

private Set<Employee> emps = new HashSet<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;}public Set<Employee> getEmps() {    return emps;}public void setEmps(Set<Employee> emps) {    this.emps = emps;}

}

Privilege.hbm.xml

测试:
    Privilege privilege1 = new Privilege();    privilege1.setName("风控设置");    Privilege privilege2 = new Privilege();    privilege2.setName("划拨请求");    Employee employee1 = new Employee("tg", "1", 100, "tg", "投顾");    privilege1.getEmps().add(employee1);    privilege2.getEmps().add(employee1);    employee1.getPrivileges().add(privilege1);    employee1.getPrivileges().add(privilege2);    privilegeService.save(privilege1);    privilegeService.save(privilege2);    employeeService.saveOrUpdate(employee1);    Privilege privilege3 = new Privilege();    privilege3.setName("审核");    Employee employee2 = new Employee("sh", "1", -1, "sh", "审核");    privilege1.getEmps().add(employee1);    employee2.getPrivileges().add(privilege3);    privilegeService.save(privilege3);    employeeService.saveOrUpdate(employee2);    Privilege privilege4 = new Privilege();    privilege4.setName("批准");    Employee employee3 = new Employee("cp", "1", 100, "cp", "产品经理");    privilege4.getEmps().add(employee1);    employee3.getPrivileges().add(privilege4);    privilegeService.save(privilege4);    employeeService.saveOrUpdate(employee3);

“`
现象:
Hibernate:
insert
into
PRIVILEGE
(NAME)
values
(?)
Hibernate:
insert
into
PRIVILEGE
(NAME)
values
(?)
Hibernate:
insert
into
EMPLOYEE
(NAME, PWD, MONEY, ROLE, REMARK)
values
(?, ?, ?, ?, ?)
Hibernate:
insert
into
EMPLOYEE_PRIVILEGE
(employeeId, privilegeId)
values
(?, ?)
Hibernate:
insert
into
EMPLOYEE_PRIVILEGE
(employeeId, privilegeId)
values
(?, ?)
Hibernate:
insert
into
PRIVILEGE
(NAME)
values
(?)
Hibernate:
insert
into
EMPLOYEE
(NAME, PWD, MONEY, ROLE, REMARK)
values
(?, ?, ?, ?, ?)
Hibernate:
insert
into
EMPLOYEE_PRIVILEGE
(employeeId, privilegeId)
values
(?, ?)
Hibernate:
insert
into
PRIVILEGE
(NAME)
values
(?)
Hibernate:
insert
into
EMPLOYEE
(NAME, PWD, MONEY, ROLE, REMARK)
values
(?, ?, ?, ?, ?)
Hibernate:
insert
into
EMPLOYEE_PRIVILEGE
(employeeId, privilegeId)
values
(?, ?)

说明:
hibernate自动创建三个表
employee 员工表
employee_privilege 关联表
privilege 权限表

end

0 0
原创粉丝点击