ssh学习:hibernate关系映射(2)

25 篇文章 0 订阅
12 篇文章 0 订阅

hibernate中,单向一对多与多对一的关联关系

1.一对多关联关系

在一对多关系中,只要在少的那一端使用集合封装多的那一端的对象就可以了。

在Xxx.hbm.xml中添加集合的配置标签,在该标签下使用<one-to-many></one-to-many>子表签,并且在子标签中的class属性指定属性类的全路径;

比如set标签中:

	<set name="set属性名">
       	<key column="外键名"></key>	
       	<one-to-many class="封装对象的全路径"/>
    </set>

 

使用set属性来实现的一对多关联关系实例:

持久化JavaBean实体:

多的一端:

 

public class Order {
			private int id;
			private String orderNum;
			private Date orderTime;
			//省去get/set方法
		}

 

少的一端:

 

public class Account {
			private int id;
			private String accName;
			// 对多端对象集合的引用,可用List,Map,等代替
			private Set<Order> setOrders;
			//省去get/set方法
		}

 

Xxx.hbm.xml配置:

多的一端:

 

<hibernate-mapping>
			<class name="com.usc.geowind.lilin.bean.oneToMany.Order" table="Order">
				<!-- type指明当前字段的类型    name对应实体中的属性名 -->
				<id type="integer" name="id">
					<!-- 提供ID自增的策略  native会根据数据库自行判断 -->
					<generator class="native"/>
				</id>
				<property name="orderNum" type="string"></property>
				<property name="orderTime" type="timestamp"></property>
			</class>
		</hibernate-mapping>

 

少的一端:

 

<hibernate-mapping>
			<class name="com.usc.geowind.lilin.bean.oneToMany.Account" table="Account">
				<!-- type指明当前字段的类型    name对应实体中的属性名 -->
				<id type="integer" name="id">
					<!-- 提供ID自增的策略  native会根据数据库自行判断 -->
					<generator class="native"/>
				</id>
				<property name="accName" type="string"></property>
				<set name="setOrders">
					<!--外键名-->
					<key column="acc_id"></key>
					<!--一对多的标签 class为一对多中多的那一端的是一类,值为全路径 -->
					<one-to-many class="com.usc.geowind.lilin.bean.oneToMany.Order"/>
				</set>
			</class>
		</hibernate-mapping>

 

 

2.多对一关联关系

在多对一的使用当中,配置与一般的配置只是有那么一点点的不同:

在多的一端引用少的一端的对象

在Xxx.hbm.xml配置中,添加<many-to-one></many-to-one>标签,name值指定为属性名:

实例:

持久化JavaBean实体:

多的一端:

 

public class OrderMTO {
			private int id;
			private String orderNum;
			private AccountMTO account;//多对一中少的一端对象
			//省去get/set方法
		}

 

少的一端:

 

public class AccountMTO {
			private int id;
			private String accName;
			//省去get/set方法
		}

 

Xxx.hbm.xml配置:

多的一端:

 

<hibernate-mapping>
			<class name="com.usc.geowind.lilin.bean.oneToMany.OrderMTO"
				table="OrdersMTO">
				<!-- type指明当前字段的类型 name对应实体中的属性名 -->
				<id type="integer" name="id" column="id">
					<!-- 提供ID自增的策略 native会根据数据库自行判断 -->
					<generator class="native" />
				</id>
				<property name="orderNum" type="string" column="orderNum"></property>
				<!--多对一的标签  name属性名,coliumn外键的名字 -->
				<many-to-one name="account" column="acc_id"></many-to-one>
			</class>
		</hibernate-mapping>

 

少的一端:

 

<hibernate-mapping>
			<class name="com.usc.geowind.lilin.bean.oneToMany.AccountMTO" table="AccountMTO">
				<!-- type指明当前字段的类型    name对应实体中的属性名 -->
				<id type="integer" name="id" column="id">
					<!-- 提供ID自增的策略  native会根据数据库自行判断 -->
					<generator class="native"/>
				</id>
				<property name="accName" type="string" column="accName"></property>
			   
			</class>
		</hibernate-mapping>

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值