首页 > 代码库 > SSH-Hibernate(二)—映射关系(中)
SSH-Hibernate(二)—映射关系(中)
Hibernate的上篇博客写了一对一关联,这篇我们说一下一对多关联。入门篇里我们说过,Hibernate的关联关系对应的是关系型数据库中的表记录之间的关系。换句话说就是以类间的关联关系,来保存或者说映射记录的关系,因为关联关系里的一对一,一对多,多对多描述的是对象(对象即记录)数量的关系。记住这一点应该是有助于理解的。
总结:一对多关联的三种映射方式,区别只在于谁持有了谁。即,作为自己的一个属性保存与其关联的对象实例。
表关系图
这张图表达的是:客户表和订单表中的记录,一个客户(即一个Customers)对应多个订单(Orders)。但是一个订单记录只能对应一个客户。类图
从这个表关系转化到类图可以有三种不同的表示方式:
- 在Order端持有的客户的一对多关系,即从订单出发到客户的单向关联。这里从Order的方向出发,则客户对其来说是唯一的,所以只要在属性里加入一个Customer的属性直接持有对应的客户。
- 在客户端持有订单集合的一对多关系,即从客户出发到订单的单向关联。这时候从Customer出发的话,其“可视”的订单是多个的。所以这里需要在属性里加入一个集合来保存客户对应的订单。
- 以上两种关系,都只能从持有的一端作为访问入口。第三种则是,双向持有。即从哪一端出发都可以拿得到对应关系的对象。
对应的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>
总结:一对多关联的三种映射方式,区别只在于谁持有了谁。即,作为自己的一个属性保存与其关联的对象实例。
SSH-Hibernate(二)—映射关系(中)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。