Hibernate中什么时候使用inverse=true

本文详细解释了在ORM框架中如何正确使用inverse=true属性。通过Person与Address的关系实例,介绍了inverse=true与inverse=false的区别,以及如何根据表结构来确定它们的应用场景。
[color=darkred][b]准确理解inverse=true的含义[/b][/color]
关系(Relationship)由两方组成,其中被定义了inverse=true的一方表示:“我是反向被控制的一方,我不负责维护关系”,而inverse=false则表示:"我是关系的控制方,拥有者,我会维护关系"。默认情况为inverse=false,即关系的两方都维护和控制关系,这中情况会造成一方重复一遍另一方已经完成的事情,比如更新外键列的值,这是不可取的,需要使用inverse=true来避免。


[b]什么时候使用inverse=true[/b]
让我们拿Person有多个Address这一例子来阐述:
Person和Address之间的关系是一对多(one-to-many),即一个Person对应多个Address.

public class Person {
private Integer id;
private Set<Address> addresses;

// setter, getter
Set<Address> getAddresses() { return addresses; }
....
}



public class Address {
private Integer id;
private Person person;

// setter, getter
Person getPerson() { return person; }
.....
}


Person类里面有"Set<Address> getAddresses()" 方法
Address类里面有"Person getPerson()" 方法

如果从现实生活来理解Person和Address这一关系的话,看起来是人可以有多个地址,所以Person应该是关系的拥有者,而Address则是被Person拥有,也即Address应该定义inverse=true,因为Address是被控制的一方,然而实际上不是。

让我们从表结构来思考问题:
PERSON[ id, name, ...]
ADDRESS[ id, person_id, city, street,...]
Person和Address之间的关系是通过Address表中的person_id列来表达出来的,也即Address表包含了关系信息(relational information)。因此,我们很容易得出答案:Address是关系的拥有者,而Person是反向被控制的一方,所以Person需要定义inverse=true。如下所示:

<class name="Person">
<id name="id">...</id>
<set name="addresses" inverse="true">
<key column="person_id"/>
<one-to-many class="Address"/>
</set>
</class>


<class name="Address">
<id name="id">...</id>
<many-to-one name="person" class="Person" />
</class>


总结:
1)通过表结构信息来决定那一方使用inverse=true,哪一方使用inverse=false.
2)如果表包含了关系信息,则该表是关系的拥有者,使用inverse=false.
3)如果表没有包含关系信息,则使用inverse=true.

当然你可以选择记住一条简洁的规则:
[color=darkred][b]总是将inverse=”true”定义在集合变量上[/b][/color]

参考文章:
[url]http://tadtech.blogspot.hk/2007/02/hibernate-when-is-inversetrue-and-when.html[/url]
[url]http://www.developer.am/documentation/hibernate/?page=inverse_true__explanation[/url]
基于粒子群优化算法的p-Hub选址优化(Matlab代码实现)内容概要:本文介绍了基于粒子群优化算法(PSO)的p-Hub选址优化问题的研究与实现,重点利用Matlab进行算法编程和仿真。p-Hub选址是物流与交通网络中的关键问题,旨在通过确定最优的枢纽节点位置和非枢纽节点的分配方式,最小化网络总成本。文章详细阐述了粒子群算法的基本原理及其在解决组合优化问题中的适应性改进,结合p-Hub中转网络的特点构建数学模型,并通过Matlab代码实现算法流程,包括初始化、适应度计算、粒子更新与收敛判断等环节。同时可能涉及对算法参数设置、收敛性能及不同规模案例的仿真结果分析,以验证方法的有效性和鲁棒性。; 适合人群:具备一定Matlab编程基础和优化算法理论知识的高校研究生、科研人员及从事物流网络规划、交通系统设计等相关领域的工程技术人员。; 使用场景及目标:①解决物流、航空、通信等网络中的枢纽选址与路径优化问题;②学习并掌握粒子群算法在复杂组合优化问题中的建模与实现方法;③为相关科研项目或实际工程应用提供算法支持与代码参考。; 阅读建议:建议读者结合Matlab代码逐段理解算法实现逻辑,重点关注目标函数建模、粒子编码方式及约束处理策略,并尝试调整参数或拓展模型以加深对算法性能的理解。
内容概要:本文全面介绍了C#全栈开发的学习路径与资源体系,涵盖从基础语法到企业级实战的完整知识链条。内容包括C#官方交互式教程、开发环境搭建(Visual Studio、VS Code、Mono等),以及针对不同应用场景(如控制台、桌面、Web后端、跨平台、游戏、AI)的进阶学习指南。通过多个实战案例——如Windows Forms记事本、WPF学生管理系统、.NET MAUI跨平台动物图鉴、ASP.NET Core实时聊天系统及Unity 3D游戏项目——帮助开发者掌握核心技术栈与架构设计。同时列举了Stack Overflow、Power BI、王者荣耀后端等企业级应用案例,展示C#在高性能场景下的实际运用,并提供了高星开源项目(如SignalR、AutoMapper、Dapper)、生态工具链及一站式学习资源包,助力系统化学习与工程实践。; 适合人群:具备一定编程基础,工作1-3年的研发人员,尤其是希望转型全栈或深耕C#技术栈的开发者; 使用场景及目标:①系统掌握C#在不同领域的应用技术栈;②通过真实项目理解分层架构、MVVM、实时通信、异步处理等核心设计思想;③对接企业级开发标准,提升工程能力和实战水平; 阅读建议:此资源以开发简化版Spring学习其原理和内核,不仅是代码编写实现也更注重内容上的需求分析和方案设计,所以在学习的过程要结合这些内容一起来实践,并调试对应的代码。
内容概要:本文介绍了一种基于CNN-BiLSTM-Attention-Adaboost的多变量时间序列预测模型,通过融合卷积神经网络(CNN)提取局部特征、双向长短期记忆网络(BiLSTM)捕捉时序依赖、注意力机制(Attention)动态加权关键时间步,以及Adaboost集成学习提升模型鲁棒性,实现高精度、可解释的预测。项目涵盖数据预处理、模型构建、训练优化与服务化部署全流程,并在光伏功率、空气质量、电商需求等多个场景验证有效性。模型采用模块化设计,支持配置化管理与Docker一键部署,结合ONNX Runtime实现高效推理,兼顾性能与实用性。; 适合人群:具备一定深度学习基础,熟悉Python与PyTorch框架,从事时间序列预测、智能运维、工业AI等相关领域的研究人员或工程师(工作1-3年为宜);; 使用场景及目标:①解决多变量时间序列中多尺度动态建模难题,提升预测准确性与稳定性;②应对真实场景中的噪声干扰、数据缺失与分布漂移问题;③通过注意力可视化增强模型可解释性,满足业务沟通与合规审计需求;④实现从研发到生产的快速落地,支持高频并发预测服务; 阅读建议:建议结合完整代码与示例数据实践,重点关注模型架构设计逻辑、两阶段训练策略与推理优化手段,同时利用提供的YAML配置与自动化工具进行跨场景迁移与实验对比。
【水下机器人建模】基于QLearning自适应强化学习PID控制器在AUV中的应用研究(Matlab代码实现)内容概要:本文研究了基于QLearning自适应强化学习的PID控制器在自主水下航行器(AUV)中的应用,通过Matlab代码实现水下机器人建模与控制系统设计。重点探讨了将强化学习算法与传统PID控制相结合的方法,以提升AUV在复杂海洋环境中的自适应控制能力,优化轨迹跟踪与稳定性控制性能。文中详细介绍了AUV的动力学建模、状态反馈控制架构设计以及QLearning算法在参数自整定中的实现过程,展示了仿真结果验证所提方法的有效性与鲁棒性。; 适合人群:具备一定自动化、控制理论或机器人学基础,熟悉Matlab/Simulink仿真环境,从事智能控制、水下机器人或强化学习应用研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于智能水下机器人控制系统设计,提升其在未知或动态环境下的自主控制能力;②为强化学习与经典控制理论融合提供实践案例,服务于科研仿真、课程设计或工程原型开发;③帮助读者掌握QLearning在控制优化中的具体实现方法,推动AI技术在海洋装备中的落地应用。; 阅读建议:建议读者结合Matlab代码逐模块分析,重点关注状态空间构建、奖励函数设计及PID参数调整机制,动手复现仿真流程以深入理解算法细节,并可进一步扩展至其他智能算法或多智能体协同控制场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值