hibernate关系映射

关系映射总结


一个人拥有多张卡,中间表是PERSON_CARD,

双向多对一关系

中间表
一端的映射

			<set name="set" table="PERSON_CARD" inverse="true">
				<key column="person_id"></key>
				<many-to-many column="CARD_ID" unique="true" class="com.link6.Card"></many-to-many>
			</set>



理解:set集合用set元素映射,key指定当前表主键在中间表中的外键映射列,

many-to-many指定set集合数据在表中的映射列,

这里是多对一映射,set映射的列应该是不能重复的,class指定set集合保存的元素类型,
这里用many-to-many,不用其他的理解
one-to-one 这个用在一对一的关系中
one-to-many 这个用在一对多的关系中,设置的列在

many-to-one 这个用在多对一的关系中,设置unique可以用在一对一的关系中


多端的映射

			<join table="PERSON_CARD">
				<key column="CARD_ID"></key>
				<many-to-one name="person" column="PERSON_ID" class="com.link6.Person" ></many-to-one>
			</join>



理解:
这里的类属性用join来映射到中间表中,key指定当前类关联的表的主键在中间表的映射的外键的列,
many-to-one name属性是类的字段,column指定在中间表中的关联列,class指定类类字段的类型
无中间表

一端映射

				<set name="set" inverse="true">
					<key column="person_id"></key>
					<one-to-many class="com.link6.Card" />
				</set>



理解:
key指定当前类对应的表在多端关联的列,

one-to-many属性不能设置column和name属性,

set集合里面元素关联的就是class属性关联的类对应的表,

所以免去了name和column属性

多端映射

				<many-to-one name="person" column="PERSON_ID" class="com.link6.Person"></many-to-one>



理解:
指定类字段在当前类对应表中映射的列

双向一对一关系映射


一个人有一张卡

有中间表

			<join table="PERSON_CARD" optional="true">
				<key column="CARD_ID" unique="true"></key>
				<many-to-one name="person" unique="true" column="PERSON_ID" class="com.link6.Person"></many-to-one>
			</join>
			
			<join table="PERSON_CARD" inverse="true" optional="true">
				<key unique="true" column="PERSON_ID"></key>
				<many-to-one name="card" unique="true" column="CARD_ID" class="com.link6.Card"></many-to-one>
			</join>



理解:

两端的配置文件都是采用join连接到中间表,用key指定当前类关联的表的主键,

在中间表的外键,同时设置为unique约束

many-to-one 设置类字段在中间表关联的列,同样也是设置为unique约束
无中间表

唯一主键映射
				<id name="id" type="java.lang.Integer">
					<column name="ID" />
					<generator class="foreign">
						<param name="property">card</param>
					</generator>
				</id>
			
				<id name="id" type="java.lang.Integer">
					<column name="ID" />
					<generator class="native" />
				</id>



理解:

两个类对应的id配置,其中一个使用native生成方式,

另外一个使用外键生成器,根据关联表的id生成为一的id主键,


				<one-to-one name="card" class="com.link6.Card"></one-to-one>
				<one-to-one name="person" class="com.link6.Person" ></one-to-one>



理解:
使用one-to-one映射一对一关系,不用在表中生成辅助的列,hibernate会根据主键的关系,进行查找

唯一外键映射

				<many-to-one name="card" class="com.link6.Card" column="CARD_ID" unique="true"></many-to-one>
				<one-to-one name="person" class="com.link6.Person" property-ref="card" ></one-to-one>	



理解:
many-to-one 指定在当前表中生成的外外键列,并设置为unique
one-to-one 默认是关联指定class对应表的主键
property-ref指定关联出主键以外的字段


双向的多对多


一张卡关联多个人,一个人拥有多张卡

含有中间表

			<set name="set" inverse="true">
				<key column="PERSON_ID"></key>
				<many-to-many class="com.link6.Card" column="CARD_ID"></many-to-many>
			</set>
			
			<set table="PERSON_CARD" name="set">
				<key column="CARD_ID"></key>
				<many-to-many column="PERSON_ID" class="com.link6.Person"></many-to-many>
			</set>



理解:
这里使用set元素匹配set集合,使用key匹配当前表的主键,
使用many-to-many匹配set集合元素在中间表中关联的列
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值