SSH-Hibernate(二)—映射关系(中)

10 篇文章 0 订阅
7 篇文章 0 订阅
    Hibernate的上篇博客写了一对一关联,这篇我们说一下一对多关联。入门篇里我们说过,Hibernate的关联关系对应的是关系型数据库中的表记录之间的关系。换句话说就是以类间的关联关系,来保存或者说映射记录的关系,因为关联关系里的一对一,一对多,多对多描述的是对象(对象即记录)数量的关系。记住这一点应该是有助于理解的。

表关系图

    这张图表达的是:客户表和订单表中的记录,一个客户(即一个Customers)对应多个订单(Orders)。但是一个订单记录只能对应一个客户。

类图

    从这个表关系转化到类图可以有三种不同的表示方式:

    1. 在Order端持有的客户的一对多关系,即从订单出发到客户的单向关联。这里从Order的方向出发,则客户对其来说是唯一的,所以只要在属性里加入一个Customer的属性直接持有对应的客户。
    2. 在客户端持有订单集合的一对多关系,即从客户出发到订单的单向关联。这时候从Customer出发的话,其“可视”的订单是多个的。所以这里需要在属性里加入一个集合来保存客户对应的订单。
    3.  以上两种关系,都只能从持有的一端作为访问入口。第三种则是,双向持有。即从哪一端出发都可以拿得到对应关系的对象。

对应的Hibernate配置

    1. Order→Customer

<span style="font-family:FangSong_GB2312;font-size:18px;">                多端
		<hibernate-mapping>  
		    <!--类和表之间的映射-->
		    <class name="com.tgb.hibernate.Order" table="t_order">  
		        <id name="id">  
		            <generator class="native"/>  
		        </id>  
		        <property name="name"/>  		
		        <many-to-one name="customer" column="customerId"/>  
		    </class>  
		</hibernate-mapping>  
		  
		一端
		<hibernate-mapping>  
		    <class name="com.tgb.hibernate.Customer" table="t_customer">  
		        <id name="id">  
		            <generator class="native"/>  
		        </id>  
		        <property name="name"/>  
		    </class>  
		</hibernate-mapping>  
		</span>

    2. Customer→Order

<span style="font-family:FangSong_GB2312;font-size:18px;">                多端
		<hibernate-mapping>  
		    <class name="com.tgb.hibernate.Order" table="t_order">  
		        <id name="id">  
		            <generator class="native"/>  
		        </id>  
		        <property name="name"/>   
		    </class>  
		</hibernate-mapping>  
		  
		一端
		<hibernate-mapping>  
		    <class name="com.tgb.hibernate.Customer" table="t_group">  
		        <id name="id">  
		            <generator class="native"/>  
		        </id>  
		        <property name="name"/>  
		        <set name="orders" inverse="true" cascade="all">
		                <key column="customer_id" ></key>
		                <one-to-many class="com.tgb.hibernate.Order"/>
		        </set>
		    </class>  
		</hibernate-mapping>  <span style="background-color: rgb(255, 255, 255);">		</span></span>

    3. 双向关联

<span style="font-family:FangSong_GB2312;font-size:18px;">	多端
	<hibernate-mapping>  
	    <!--类和表之间的映射-->
	    <class name="com.tgb.hibernate.Order" table="t_order">  
	        <id name="id">  
	            <generator class="native"/>  
	        </id>  
	        <property name="name"/>  		
	        <many-to-one name="customer" column="customerId"/>  
	    </class>  
	</hibernate-mapping>  
	一端
	<hibernate-mapping>  
	    <class name="com.tgb.hibernate.Customer" table="t_group">  
	        <id name="id">  
	            <generator class="native"/>  
	        </id>  
	        <property name="name"/>  
	        <set name="orders" inverse="true" cascade="all">
	                <key column="customer_id" ></key>
	                <one-to-many class="com.tgb.hibernate.Order"/>
	        </set>
	    </class>  
	</hibernate-mapping>  </span>

    总结:一对多关联的三种映射方式,区别只在于谁持有了谁。即,作为自己的一个属性保存与其关联的对象实例。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值