1条回答 默认 最新
- 秦风萧萧 2018-12-13 11:23关注
关联映射之一对多、多对一映射
一、需求:
部门与员工
一个部门有多个员工 【一对多】
多个员工,属于一个部门 【多对一】二、逻辑分析:
三、代码实现
1、javabean及映射文件的配置:
1)Employee.java、Employee.hbm.xml2)Dept.java、Dept.hbm.xml
完整的Dept.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">
<!--
一对多关联映射的配置(通过部门管理员工)
Dept 映射关键点:
1. 指定 映射的集合属性: "emps"
2. 集合属性对应的集合表: "t_employee"
3. 集合表的外键字段 "t_employee. dept_id"
4. 集合元素的类型table="t_employee"可以省略, 因为有对应的<one-to-many class="Employee"/>, 并且可以找到Employee.hbm.xml 如果写上,那么talbe的值"t_employee"一定要与 Employee.hbm.xml(<class name="Employee" table="t_employee">)中的表名一致 --> <set name="emps" table="t_employee"> <!-- colunmn的值(dept_id),一定要与Employee.hbm.xml中的 <many-to-one name="dept" column="dept_id" class="Dept"></many-to-one> 的colunm值一致 --> <key column="dept_id"></key> <!-- class指定集合元素类型,sram.oneTomany.Employee, 但是因为<hibernate-mapping package="sram.oneTomany" auto-import="true"> 这里已经指定包名,所以只写Employee就OK --> <one-to-many class="Employee"/> </set>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2、测试类App1_save.java——实现保存的功能package sram.oneToMany;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;public class App1_save {
public static SessionFactory sf;
static{
sf = new Configuration()
.configure()
.addClass(Dept.class)
.addClass(Employee.class)//测试使用
.buildSessionFactory();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1)部门方(一的一方操作)2)【推荐】员工方(多的一方操作)
3、数据库结果:
1)员工表:2)部门表:
4、测试类App2_get.java——实现保存的功能
package sram.oneToMany;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;public class App1_save {
public static SessionFactory sf;
static{
sf = new Configuration()
.configure()
.addClass(Dept.class)
.addClass(Employee.class)//测试使用
.buildSessionFactory();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1)通过部门方获取另一方:2)通过员工方获取另一方:
四、总结:
1、在一对多与多对一的关联关系中,保存数据最好通过多的一方来维护关系,这样可以减少update语句的生成,从而提高hibernate的执行效率!2、概念:
配置一对多与多对一,这种叫“双向关联”
只配置一对多,叫“单向一对多”只配置多对一,叫“单向多对一”
作者:Cool_Tomato
来源:CSDN
原文:https://blog.csdn.net/qq_34944851/article/details/53737332
版权声明:本文为博主原创文章,转载请附上博文链接!解决 无用评论 打赏 举报
悬赏问题
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 ubuntu子系统密码忘记
- ¥15 保护模式-系统加载-段寄存器