Hibernate初探之多对多映射
来源:互联网 发布:linux查看acl 编辑:程序博客网 时间:2024/06/05 04:05
多对多的应用场景
企业项目开发过程中
- 一个项目可由多个员工参与开发
- 一个员工可同时参与开发多个项目
多对多关联(many-to-many)
多对多关联也是常见的一种关联关系,如项目和员工之间就是典型的多对多关系。
雇员表 >> 雇员信息 项目表 >> 项目信息
多对多关联一般采用中间表的形式来表现,即新增一张包含关联双方主键的关联表
多对多关联可以使用<set>元素和<many-to-many>元素进行配置
创建项目和表
1.创建Java工程hibernate-many2many
2.创建主配置文件hibernate.cfg.xml
3.创建init.sql
create table project( proid int primary key, proname varchar(20) not null);create table employee( empid int primary key, empname varchar(20));create table proemp( rproid int, rempid int);alter table proemp add constraint fk_rproid foreign key (rproid) references project(proid);alter table proemp add constraint fk_rempid foreign key (rempid) references employee(empid);4、创建持久类和映射文件
Project.java 与Employee类似
public class Project {private int proid;private String proname;// 添加一个员工 的集合private Set<Employee> employees = new HashSet<Employee>(); //无参构造 //有参构造 //getter and setter}5.配置映射文件
Project.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><class name="com.lijy.entity.Project" table="project"> <id name="proid" column="proid" type="java.lang.Integer"> <generator class="assigned"></generator> </id> <property name="proname" type="java.lang.String"> <column name="proname" length="20"></column> </property> <!-- 设置多对多关联关系 --> <set name="employees" table="proemp"> <key column="rproid"></key> <many-to-many class="com.lijy.entity.Employee" column="rempid"></many-to-many> </set></class></hibernate-mapping>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><class name="com.lijy.entity.Employee" table="employee"> <id name="empid" column="empid" type="java.lang.Integer"> <generator class="assigned"></generator> </id> <property name="empname" type="java.lang.String"> <column name="empname" length="20" not-null="true"></column> </property> <!-- 多对多关联关系 --> <set name="projects" table="proemp"> <key column="rempid"></key> <many-to-many class="com.lijy.entity.Project" column="rproid"></many-to-many> </set></class></hibernate-mapping>
测试
package com.lijy.test;import org.hibernate.Session;import org.hibernate.Transaction;import com.lijy.entity.Employee;import com.lijy.entity.Project;import com.lijy.util.HibernateUtil;/** * 多对多关联联系的配置 * 同时建立了Project和Employee之间的双向多对多关联关系 * 关联关系的维护交由Project方来维护处理,并且在保存Project对象时会一并保存Employee对象 */public class Test { public static void main(String[] args) { Project project1 = new Project(1001, "项目1"); Project project2 = new Project(1002, "项目2"); Employee employee1 = new Employee(1, "张三"); Employee employee2 = new Employee(2, "李四"); //参加项目1的员工有张三和李四 project1.getEmployees().add(employee1); project1.getEmployees().add(employee2); //参加项目2的员工有张三 project2.getEmployees().add(employee1); Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); session.save(project1); session.save(project2); tx.commit(); HibernateUtil.closeSession();}}如果由Project方来维护,在Project.hbm.xml的set中设置级联方式cascade="all",并且在Employee.hbm.xml中的set设置inverse="true"
总结:
实现多对多关联关系
在数据库底层通过添加中间表来指定关联关系
在 双方的实体中添加一个保存对象的集合
在双方映射文件中使用<set>元素和<many-to-many>元素进行关联关系的配置。
引用:
慕课网
阅读全文
0 0
- Hibernate初探之多对多映射
- Hibernate之多对多映射
- hibernate关系映射之多对多
- hibernate映射关系之多对多
- Hibernate关系映射之多对多关系
- 【Hibernate五】关系映射之多对多
- Hibernate关联映射之多对多
- Hibernate多表映射之多对一
- Hibernate学习之多对多映射
- Hibernate映射关系之多对多关系映射
- Hibernate关联映射之多对多单/双向关联映射
- Hibernate表关系映射之多对多映射
- 【Hibernate】(八)关联映射之多对多映射
- hibernate初探之一对多映射
- Hibernate初探之一对多映射
- Hibernate映射之多对一关联映射
- Hibernate关联关系映射之多对多关联关系
- Hibernate(4)关联映射之多对多
- ios-摇一摇功能实现
- 优化:微调Finetuning
- 摩尔定律的终结
- 51nod 1091 线段的重叠
- 《诗经·郑风·有女同车》
- Hibernate初探之多对多映射
- web_video_server功能包的使用
- Ubuntu 下安装启动ssh服务
- VMware Workstation安装CentOS7(菜鸟笔记,多多指点)
- hibernate4中取得connection的方法
- 虚拟机启动一片黑
- 驾校学车如何轻松搭建微信预约系统
- 【Angular2】OnlineExam组件设计
- 构建二叉树(java)