勿谓今日不学而有来日,勿谓今年不学而有来年。
日月逝矣,岁不我延。

Hibernate的关联关系映射

        在不考虑关联的方向前提下,关联的联系种类即是关系数据库中表示实体与实体之间的联系种类:    1:1,1:n,m:n。

  • 一对一关联(1:1):如用户和身份证、一夫一妻
  • 一对多关联(1:n):如班级和学生
  • 多对多关联(m:n):如学生和选课

关联关系的方向可分为单向关联和双向关联。双向关联的方向其实就不重要了,因为通过任一一方都可以维护彼此的关系。也就是说:在双向关联中一对多和多对一都是一样的。

映射一对一关联关系

基于外键映射的一对一关联关系

对于基于外键的1-1关联,其外键可以存放在任意一边,在需要存放外键一端,增加many-to-one元素。为many-to-one元素增加unique=“true” 属性来表示为1-1关联

另一端需要使用one-to-one元素,该元素使用 property-ref 属性指定使用被关联实体主键以外的字段作为关联字段

基于主键映射的 一对一关联关系

基于主键的映射策略:指一端的主键生成器使用 foreign 策略,表明根据”对方”的主键来生成自己的主键,自己并不能独立生成主键. 子元素指定使用当前持久化类的哪个属性作为 “对方”

采用foreign主键生成器策略的一端增加 one-to-one 元素映射关联属性,其one-to-one属性还应增加 constrained=“true” 属性;另一端增加one-to-one元素映射关联属性。

constrained(约束):指定为当前持久化类对应的数据库表的主键添加一个外键约束,引用被关联的对象(对方”)所对应的数据库表主键

映射多对多关联关系

单向多对多关联关系

n-n 的关联必须使用连接表。与 1-n 映射类似,必须为 set 集合元素添加 key 子元素,指定 CATEGORIES_ITEMS 表中参照 CATEGORIES 表的外键为 CATEGORIY_ID.

与 1-n 关联映射不同的是,建立 n-n 关联时, 集合中的元素使用 many-to-many. many-to-many 子元素的 class 属性指定 items 集合中存放的是 Item 对象, column 属性指定 CATEGORIES_ITEMS 表中参照 ITEMS 表的外键为 ITEM_ID

双向多对多关联关系

双向n-n关联需要两端都使用集合属性,必须使用连接表。
集合属性应增加key子元素用以映射外键列,集合元素里还应增加many-to-many子元素关联实体类
在双向n-n关联的两边都需指定连接表的表名及外键列的列名.两个集合元素set的table元素的值必须指定,而且必须相同。set元素的两个子元素:key和many-to-many都必须指定column属性,其中,key和many-to-many分别指定本持久化类和关联类在连接表中的外键列名,因此两边的key与many-to-many的column属性交叉相同。即一边的set元素的key的cloumn值为a,many-to-many的column为b;则另一边的set元素的key的column值b,many-to-many的column值为a.
对于双向n-n关联,必须把其中一端的inverse设置为true,否则两端都维护关联关系可能会造成主键冲突.

本文源码:https://github.com/llanc/SSH_Learn/tree/master/Hibernate_02_RelationshipMapping

赞(1)
未经允许不得转载:喋喋不休 » Hibernate的关联关系映射

评论 抢沙发

评论前必须登录!

 

精品网站

有券无忧电脑壁纸精选