SSH-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>
总结:一对多关联的三种映射方式,区别只在于谁持有了谁。即,作为自己的一个属性保存与其关联的对象实例。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。