java hibernate 表关联_Hibernate多表关联
一、多对一进行关联(多个学生对应同一间宿舍)---学生是主体,宿舍是附体,关联关系在主体学生中设置,在学生类中设置宿舍类,由于宿舍类只有一个可以直接用类来设置,在映射学生类(User)中包含宿舍这个类(Room),在映射配置文件(User.hbm.xml)中定义
哪个是主体类就在哪个配置文件定义关联关系.
cascade属性:表示关联对象的持久化,该属性也要设置在主体中,作用就是当主控方执行操作时,关联对象(被动方)是否同步执行同一操作.
cascade的值:all:表示所有情况下都进行级联操作.
none:所有情况下都不进行级联操作
save-update:在执行save-update时进行级联操作.
delete:在执行delete时进行级联操作.
注意:使用cascade自動持久化時,會先檢查被關聯物件的id屬性,未被持久化的物件之id屬性是由unsaved-value決定,預設是null,如果您使用long這樣的原生型態(primitive type)時,則必須自行指定預設值.
例如:
如果您不想額外設定unsaved-value資訊,則可以將long改為Long,這可以符合預設的unsaved-value為null的設定 .
二、一对多进行关联(一间宿舍对应多个学生)---宿舍是主体,学生是附体,关联关系在主体宿舍中设置,由于要在宿舍类中设置学生类,一个宿舍包含多个学生,所以在宿舍类中要用Set类来进行设置,用set类(private Set users = new HashSet();)来存储多个学生类,在映射宿舍类(Room)中要包含这个节点,用来与user相关联
例如:
name:表示属性,table:表示关联的表名,key:表示通过什么字段进行关联,:表示关联类。这里也可以使用cascade属性。
三、在表关联的设计中,不论是一对多还是多对一,都要将关联字段设置在多的那一方。
例如:user表格和room表格,要将关联字段room_id设置在user表格中。
四、一对一进行关联(一个人只有一个房间,一个房间也只有一个人)。
可以通过2中方式进行关联:
(1)、通过外键进行关联:在多对一的例子中就是通过外键进行关联的.
在user-room的设置中(user.hbm.xml):
column="ROOM_ID"
class="onlyfun.caterpillar.Room"
cascade="all"
unique="true"/>
其中unique表示限制一個User有一獨有的 Room,这只是单向的,说明一个user只有一个room.
在room-user的设置中(room.hbm.xml):
class="onlyfun.caterpillar.User"
property-ref="room"/>
这样就完成了双向的一对一关联,property-ref告诉hibernate,查询出user并将其参考至room。
(2)、通过主键进行关联:限制兩個資料表的主鍵使用相同的值,如此一個User與Room就是一對一關係
user.hbm.xml:
class="onlyfun.caterpillar.Room"
cascade="all"/>
room.hbm.xml:
class="onlyfun.caterpillar.User"
constrained="true"/>
使用constrained="true"告訴Hibernate參考至User的主鍵
五、双向关联,就是将一和二结合起来,如果將關聯的維護交給User的話會比較容易,因為每個User都對應至一個Room,在儲存時並用像Room一樣必須對Set中的每個物件作檢查,為了將關聯的維護交給User,我們可以在Room.hbm.xml中的修改,加上inverse="true",表示將關聯的維護「反過來」交給User作例如:
在設立雙向關聯時,關聯由多對一中「多」的哪一方維護,會比由「一」的哪一方維護來的方便,在Hibernate可以藉由inverse來設定,不設定inverse基本上也可以運行,但是效能會較差
java hibernate 表关联_Hibernate多表关联相关推荐
- java hibernate 多对多_hibernate 多对多映射配置详解
表关系 如图: Teacher.java文件: privateint id; private String name; private Set teachers; Student.java文件: pr ...
- java多对多关联数据操作,hibernate实施多对多关联查询时,关联表数据被删除
hibernate执行多对多关联查询时,关联表数据被删除 本帖最后由 binbb521 于 2012-12-04 11:48:29 编辑 S2SH框架开发的网站,执行两个多对多关系的表查询时,关联两个 ...
- Hibernate实现对多个表进行关联查询
Hibernate实现对多个表进行关联查询? String sTest = "from tBookInfo book, BookSelection sel where book.id = s ...
- Java hibernate假外键_浅谈hibernate急迫加载问题(多重外键关联)
数据库结构如下 strategy中有外键member_id(关联member表)外键strategy_category(关联category表)而member表中有外键position_id(关联po ...
- 1.19.5.3.时态表、关联一张版本表、关联一张普通表、时态表、声明版本表、声明版本视图、声明普通表、时态表函数等
1.19.5.3.时态表(Temporal Tables) 1.19.5.3.1.设计初衷 1.19.5.3.1.1.关联一张版本表 1.19.5.3.1.2.关联一张普通表 1.19.5.3.2.时 ...
- React入门系列 - 5. 表单与变量的关联
5. 表单与变量的关联 在了解表单的时候,我们需要了解一个概念受控组件和非受控组件. 受控组件就是React可以控制这个组件内部所有的东西,比如设置控件的value,可以监听到这个组件改变事件onCh ...
- jpa多表关联查询_JPA【关联查询篇】
摘要:本文主要介绍JPA的多表关联查询(一对一.一对多.双向关联.多对一.多对多)以及N+1查询的优化. 1. JPA多表关联查询 多表关联查询就是实现使用一个实体类对象操作或者查询多个表的数据. 配 ...
- mysql删除有关联的数据库表_【数据库】mysql如何删除关联表
mysql数据库中,表与表之间进行关联之后,就不可随意的进行删除操作,否则会影响所有关联表之间的结构,那么如何安全的删除关联表呢,让我们来了解一下. 推荐课程:MySQL教程. 1. 删除表的外键约束 ...
- hibernate mysql 映射_hibernate与mysql映射类型对应表与mysql导入导出
http://blog.sina.com.cn/s/blog_5f240fc40100etlt.html 一.记录下hibernate mysql映射类型对应表: 1.常规Hibernate 映射 i ...
最新文章
- 一打在2019年亮相的迷人科技项目:飞行汽车、子弹头列车、登月、……
- C++知识点53——虚继承
- PAT-乙级-1064 朋友数
- 收藏!这 10 篇硬核论文,让你宅家也能更了解图神经网络
- [Leetcode][第461题][JAVA][汉明距离][位运算][Brian Kernighan]
- 【SpringBoot 2】(七)请求处理——映射 常用注解 方法参数的小技巧
- 马斯克:挑战纽北赛道的Model S配有7个座椅
- nginx-一个端口代理多个服务
- 粒子群优化算法及MATLAB实现
- CGAN和InfoGAN理解
- gridview的sort_GRIDVIEW排序的动态实现...
- 图片转字符画(已打包)
- 词汇处理——词义辨析消歧(一)
- 2022-2023 物联网毕业设计选题推荐
- 解决intellij IDEA设置浏览器路径之后重启失效的问题
- 小米手机任意版本MIUI安装Google Play服务
- 我的世界空岛生存服务器制作,我的世界1.7.10羽逸之光空岛生存服务器
- usb设备检测linux,Linux下USB设备检测全教程(转)
- Android 获得app的应用签名
- Python爬虫实例 wallhaven网站高清壁纸爬取。
热门文章
- CentOS7使用firewalld打开关闭防火墙与端口(转载)
- linux升级python
- Exchange收件人管理
- Cisco Adsl 详细配置
- 分区表分区字段的update操作
- linux 星号 通配符,如何在bash中转义通配符/星号字符?
- 设计一个应用程序,以在C#中的按钮单击事件上在MessageBox中显示TextBox中的文本...
- Python | Pyplot标签
- python 示例_Python日历类| yeardatescalendar()方法与示例
- mysql 视图 字典_MySQL深入01-SQL语言-数据字典-服务器变量-数据操作DML-视图