需求:在员工和权限的设置权衡上,员工和权限都是多对多的关系。
员工和权限两张表
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