Hibernate多对多映射
来源:互联网 发布:mac无线键盘出现乱键 编辑:程序博客网 时间:2024/05/22 16:53
(1)在数据库的底层,一般采用中间表的形式来实现,即新增一张包含关联双方主键的关联表
(2)在双方的实体中添加一个保存对方的集合
(3)在双方的映射文件中使用<set>
元素和<many-to-many>
进行关联关系的配置。
先看数据库表的建立
create table project{ pid int primary key, pname varchar(20) not null};create table employee( eid int primary key, ename varchar(20));create table proemp( rpid int, reid int);alter table proemp add constraint fk1 foreign key (rpid) references project(pid);alter table proemp add constraint fk2 foreign key (reid) references employee(eid);
再添加对方的集合
public class Employee { private int eid; private String ename; private Set<Project> projects = new HashSet<Project>();}
public class Project { private int pid; private String pname; private Set<Employee> employees = new HashSet<Employee>();}
最后在映射文件中配置
<!-- 配置多对多关联关系 --> <!-- 关联关系交由Project方处理 --> <set name="projects" table="proemp" inverse="true"> <key column="reid"></key> <many-to-many class="com.imooc.entity.Project" column="rpid"></many-to-many> </set>
<!-- 配置多对多关联关系 --> <set name="employees" table="proemp" cascade="all"> <key column="rpid"></key> <many-to-many class="com.imooc.entity.Employee" column="reid"></many-to-many> </set>
测试方法如下:
Project project1 = new Project(1001, "项目1"); Project project2 = new Project(1002, "项目2"); Employee employee1 = new Employee(1, "傻比1"); Employee employee2 = new Employee(2, "傻比2"); /* *项目到雇员的关系 */ project1.getEmployees().add(employee1); project1.getEmployees().add(employee2); project2.getEmployees().add(employee1); Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); session.save(project1); session.save(project2); tx.commit();
输出的sql语句为:
Hibernate: select employee_.eid, employee_.ename as ename2_0_ from employee employee_ where employee_.eid=?Hibernate: select employee_.eid, employee_.ename as ename2_0_ from employee employee_ where employee_.eid=?Hibernate: insert into project (pname, pid) values (?, ?)Hibernate: insert into employee (ename, eid) values (?, ?)Hibernate: insert into employee (ename, eid) values (?, ?)Hibernate: insert into project (pname, pid) values (?, ?)Hibernate: insert into proemp (rpid, reid) values (?, ?)Hibernate: insert into proemp (rpid, reid) values (?, ?)Hibernate: insert into proemp (rpid, reid) values (?, ?)
0 0
- Hibernate关联映射--多对一映射
- hibernate 多对多映射
- Hibernate多对多映射
- hibernate多对多映射
- Hibernate多对多映射
- Hibernate多对多映射
- hibernate多对多映射
- 多对多 hibernate映射
- Hibernate多对多映射
- Hibernate---多对多映射
- Hibernate多对多映射
- Hibernate 多对多映射
- 【Hibernate】多对多映射
- 【Hibernate】多对多映射
- Hibernate映射多对多
- hibernate多对多映射
- 【Hibernate】多对多映射
- hibernate多对多映射
- 菜鸟学ASP.NET MVC4入门笔记
- caffe编译与安装过程中的疑难点
- 老罗安卓android开发第一期第二期视频教程+1,2期源码
- 想要在SQL语句中可以使用用户自定义的函数,那么这样的用户定义函数有哪些限制?
- shared_ptr之循环引用&定置删除器
- Hibernate多对多映射
- POJ 2362 Square
- Hololens入门之语音识别(语音命令)
- Could not load the Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-config
- 《算法学习与数据结构》part3 算法分析与数据结构之数组和广义表
- OC中类变量的@protected,@private,@public,@package区别
- Hadoop深入学习:HDFS主要流程——SNN合并fsimage和编辑日志
- 火车进出站-字典序输出(华为OJ)
- 染色法