【SSH 基础】浅谈Hibernate关系映射(4)

22 篇文章 0 订阅

继上篇博客

 

多对多关联映射(单向)

 

多对多对象关系映射,需要加入一张新表完成基本映射。

  • Hibernate会自动生成中间表
  • Hibernate使用many-to-many标签来表示多对多的关联,多对多的关联映射,在实体类中,跟一对多一样,也是用集合来表示的。

 

如下图所示

                     

通过User可以查看Role的信息

 

User的映射文件

<hibernate-mapping>
	<class name="com.bjpowernode.hibernate.User">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"></property>
		<set name="roles" table="t_user_role">
			<key column="user_id"></key>
			<many-to-many class="com.bjpowernode.hibernate.Role" column="role_id"></many-to-many>
		</set>		
	</class>	
</hibernate-mapping>

Role的映射文件

<hibernate-mapping>
	<class name="com.bjpowernode.hibernate.Role">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"></property>	
	</class>	
</hibernate-mapping>

多对多关联映射(双向)

 

双向多对多对象关系映射,是两端都能将对方加载上来,双向都需要加上标签映射。

要注意:

*生成中间表名必须一样

*生成中间表字段必须一样

                      


User的映射文件:

<hibernate-mapping>
	<class name="com.bjpowernode.hibernate.User">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"></property>
		<set name="roles" table="t_user_role">
			<key column="user_id"></key>
			<many-to-many class="com.bjpowernode.hibernate.Role" column="role_id"></many-to-many>
		</set>		
	</class>	
</hibernate-mapping>

Role的映射文件

<hibernate-mapping>
	<class name="com.bjpowernode.hibernate.Role">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="name"></property>
		<set name="users" table="t_user_role">
			 <key column="role_id"></key>
			 <many-to-many class="com.bjpowernode.hibernate.User"></many-to-many>
		</set>
	</class>	
</hibernate-mapping>

区别:单向多对多和双向多对多存储结构没有任何的区别,但他们的映射文件是有区别的,加载过程是不同的。

 

 

关系映射总结

 

      综上所述,可以看出,同一类映射,无论是单向还是双向,他们的存储结构是相同的,之所以映射文件不同,是因为加载时不同(在增删改时)即要通过谁能看到谁,还是互相都能看到。

      无论是一对多,多对多,还是一对一等关系,例如:Student---IdCard,学生想知道卡信息,那么Student端就会有IdCard的引用,反过来也就是双向的关系的话,通过IdCard想要知道Student的信息,那么IdCard端就要要Student的引用(实体关系上的体现)!

 



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值