浅析Hibernate映射(二)——关系映射(4)

本文详细解析了一对多关联映射的概念及其在Hibernate中的实现方法。包括单向与双向关联映射的区别、如何通过XML配置文件定义这些映射关系,并讨论了inverse属性的作用。

 

单向一对多关联映射

映射后的关系模型:

映射文件:

一对多关联映射和多对一关联映射映射原理是一致的,都是在多的一端加入一个外键,指向一的一端

 

它们的区别在于维护的关系不同:


 * 多对一维护的关系是:多指向一的关系,有了此关系,在加载多的时候可以将一加载上来


 * 一对多维护的关系是:一指向多的关系,有了此关系,在加载一的时候可以将多加载上来

 

Group.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.jialin.hibernate">

	<class name="Group" table="t_group">
		<id name="id">
			<generator class="native" />
		</id>
		<property name="name" />
	
		<set name="users">
			<key column="groupid"/>
			<one-to-many class="User"/>
		</set>
	</class>

</hibernate-mapping>


User.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.jialin.hibernate">
	<class name="User" table="t_user">
		<id name="id">
			<generator class="native" />
		</id>

		<property name="name" />

	</class>

</hibernate-mapping>


在一的一端维护关系存在缺陷:
 

* 因为多的一端User不知道Group的存在(也就是User没有维护与Group的关系)
 所以在保存User的时候关系字段groupid是为null的,如果将该关系字段设置为非空,则
 将无法保存数据


 * 另外因为User不维护关系,而Group维护关系,Group就会发出多余的update语句,保证
 Group和User有关系,这样加载Group的时候才可以把该Group对应的User加载上来

 

为了克服这些缺陷,我们一般将单向一对多关联映射改为双向的。如下:

 

映射后的关系模型与单向的一样:

 

采用一对多双向关联映射的目的主要是为了主要是为了解决一对多单向关联的缺陷,而不是需求驱动的。

映射文件:

一对多双向关联的映射方式:
 * 在一的一端的集合上采用<key>标签,在多的一端加入一个外键
 * 在多的一端采用<many-to-one>标签
 * <key>标签和<many-to-one>标签加入的字段保持一直,否则会产生数据混乱

Group.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.jialin.hibernate">

	<class name="Group" table="t_group">
		<id name="id">
			<generator class="native" />
		</id>
		<property name="name" />
	
		<set name="users" inverse="true">
			<key column="groupid"/>
			<one-to-many class="User" />
		</set>
	</class>

</hibernate-mapping>


User.hbm.xml

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.jialin.hibernate">
	<class name="User" table="t_user">
		<id name="id">
			<generator class="native" />
		</id>
		
		<property name="name" />
		<many-to-one name="group" column="groupid"/>
	</class>

</hibernate-mapping>


inverse属性:


 * inverse属性可以用在一对多和多对多双向关联上,inverse属性默认为false,为 false表示本端可以维护关系,如果inverse为true,则本端不能维护关系,会交给另一端 维护关系,本端失效。
 一对多关联映射我们通常在多的一端维护关系,让一的一端失效,所以设置inverse为true

 

*inverse是控制方向上的反转,只影响存储

 

下篇继续……


 

内容概要:本研究聚焦于绿电直连型电氢氨园区的优化运行,提出一种集成绿色电力直接供给、电解水制氢及氢气合成氨工艺的综合能源系统架构。通过建立包含风光发电、电解槽、氨合成反应器、储氢罐、电网交互及多类型负荷在内的系统模型,综合考虑绿电直供优先、能量梯级利用与多能互补原则,构建以系统综合运行成本最小化为目标的优化调度模型。研究采用Matlab与Python工具进行算法求解和仿真分析,利用实际气象与负荷数据完成案例验证,评估了不同运行策略下系统的经济性、可再生能源消纳能力与碳减排效益,为新型电氢氨一体化园区的规划与运行提供了理论依据和技术支撑。; 适合人群:具备一定电力系统、新能源或化工背景的研究生、科研人员及从事综合能源系统规划与优化工作的工程技术人员。; 使用场景及目标:①用于科研学习,理解电-氢-氨多能转换系统的建模与优化方法;②为工业园区的低碳化、智能化改造提供技术参考与决策支持;③作为开发类似综合能源管理系统的理论基础。; 阅读建议:此资源包含完整的模型代码、数据与论文,使用者应结合代码仔细研读论文中的模型构建部分,重点关注目标函数与约束条件的设计逻辑,并尝试修改参数进行仿真,以深入掌握优化算法在实际系统中的应用。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值