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
- Hibernate关联映射--多对一映射
- hibernate 多对多映射
- Hibernate多对多映射
- hibernate多对多映射
- Hibernate多对多映射
- Hibernate多对多映射
- hibernate多对多映射
- 多对多 hibernate映射
- Hibernate多对多映射
- Hibernate---多对多映射
- Hibernate多对多映射
- Hibernate 多对多映射
- 【Hibernate】多对多映射
- 【Hibernate】多对多映射
- Hibernate映射多对多
- hibernate多对多映射
- 【Hibernate】多对多映射
- hibernate多对多映射
- 服务器TCP配置
- Nginx 战斗准备:优化指南
- spring mvc前台时间字符串到后台Date的转换
- PostgreSQL的外部表使用
- HDU 1247 Hat’s Words
- hibernate多对多映射
- quick-cocos2d-x游戏开发【10】——触摸捕获事件 cc.NODE_TOUCH_CAPTURE_EVENT
- Android利用画图类和线程画出闪烁心形
- 设计模式---责任链(模拟Servlet的filter)
- gson的@Expose注解和@SerializedName注解
- iOS APP 架构漫谈
- 黑马程序员——OC的三大特性:封装、继承、多态
- 周期数的判断
- layoutSubviews总结