`
不复记忆
  • 浏览: 158907 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类

Hibernate一对多和多对一关系详解 (转载)

    博客分类:
  • java
阅读更多
:双向一对多关系,一是关系维护端(owner side),多是关系被维护端(inverse side)。在关系被维护端需要通过@JoinColumn建立外键列指向关系维护端的主键列。
 
 
publicclass Order implements Serializable {
    privateSet<OrderItem> orderItems = new HashSet<OrderItem>();
         。。。。
    @OneToMany(mappedBy="order",cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @OrderBy(value = "id ASC")
    public Set<OrderItem> getOrderItems() {
        returnorderItems;
     }
}
 
publicclass OrderItem implements Serializable {
private Order order;
。。。。
    @ManyToOne(cascade=CascadeType.REFRESH,optional=false)
    @JoinColumn(name = "order_id") 
    public Order getOrder() {
        returnorder;
     }
}
@OrderBy(value = "id ASC") 指明加载OrderItem 时按id 的升序排序
 
@OneToMany的属性:
1>targetEntity
定义关系类的类型,默认是该成员属性对应的类类型,所以通常不需要提供定义。
 
2>mappedBy
定义类之间的双向关系。如果类之间是单向关系,不需要提供定义,如果类和类之间形成双向关系,我们就需要使用这个属性进行定义,否则可能引起数据一致性的问题。
该属性的值是“多”方class里的“一”方的变量名
 
3>cascade
该属性定义类和类之间的级联关系。定义的级联关系将被容器视为对当前类对象及其关联类对象采取相同的操作,而且这种关系是递归调用的。举个例子:Order 和OrderItem有级联关系,那么删除Order时将同时删除它所对应的OrderItem对象。而如果OrderItem还和其他的对象之间有级联关系,那么这样的操作会一直递归执行下去。
 
cascade的值只能从CascadeType.PERSIST(级联新建)、CascadeType.REMOVE(级联删除)、CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)中选择一个或多个。还有一个选择是使用CascadeType.ALL,表示选择全部四项。
 
4>fatch
可选择项包括:FetchType.EAGER和FetchType.LAZY。前者表示关系类(本例是OrderItem 类)在主类(本例是Order类)加载的时候同时加载,后者表示关系类在被访问时才加载。默认值是FetchType.LAZY。
 
@JoinColumn(name = "order_id")注释指定OrderItem映射表的order_id列作为外键与Order 映射表的主键列关联。
 
@ManyToOne:指明OrderItem和Order之间为多对一关系。
 
@ManyToOne注释有四个属性:targetEntity、cascade、fetch 和optional,前三个属性的具体含义和@OneToMany的同名属性相同,但@ManyToOne的fetch 属性默认值是FetchType.EAGER。
 
optional属性是定义该关联类是否必须存在,值为false 时,关联类双方都必须存在,如果关系被维护端不存在,查询的结果为null。值为true 时, 关系被维护端可以不存在,查询的结果仍然会返回关系维护端,在关系维护端中指向关系被维护端的属性为null。optional属性的默认值是true。optional 属性实际上指定关联类与被关联类的join 查询关系,如optional=false 时join 查询关系为inner join, optional=true 时join 查询关系为left join。下面代码片断解释如下:
 
 
 
 
 
有一点需要强调:当业务方法需要把一个实体Bean作为参数返回给客户端时,除了实体Bean本身需要实现Serializable 接口之外,如果关联类(OrderItem)是延迟加载,还需在返回实体Bean之前通过访问关联类的方式加载关联类(见下例)。否则在客户端访问关联类时将会抛出加载例外。
    public Order getOrderByID(Integer orderid) {
        Order order = em.find(Order.class, orderid);        
       //!!!!!因为是延迟加载,通过执行size()这种方式获取订单下的所有订单项
        order.getOrderItems().size();
       return order;
     }
 
另外不管是否延迟加载,通过join fetch 关联语句都可显式加载关联类,如下例:
 
    public List getAllOrder() {
         Query query = em.createQuery("select DISTINCT o from Order o inner
join fetch o.orderItems order by o.orderid");
         List result = query.getResultList();
        return result;
     }

 

分享到:
评论

相关推荐

    Hibernate缓存机制,转载

    Hibernate是一个流行的Java持久化框架,它简化了数据库操作,通过对象关系映射(ORM)技术将数据库操作转化为对Java对象的操作。Hibernate提供了一套高效的数据访问接口,其中包括缓存机制,以提高数据访问性能。 *...

    scratch少儿编程逻辑思维游戏源码-超级马力欧兄弟.zip

    scratch少儿编程逻辑思维游戏源码-超级马力欧兄弟.zip

    scratch少儿编程逻辑思维游戏源码-城堡躲避.zip

    scratch少儿编程逻辑思维游戏源码-城堡躲避.zip

    气动力学驱动的导弹姿态控制技术及其MATLAB仿真研究

    内容概要:本文探讨了基于气动力学的导弹姿态控制技术,并详细介绍了其MATLAB仿真方法。文章首先阐述了气动力学的基本概念以及其在导弹设计中的重要性,随后讲解了导弹姿态控制系统的构成,包括传感器、控制器和执行器的功能。接下来,重点介绍了如何利用MATLAB进行导弹飞行过程和姿态控制的仿真,包括建立导弹模型、设定环境参数、编写仿真代码等步骤。最后,通过仿真展示了气动力学在提升导弹飞行稳定性、机动性和作战效能方面的重要作用,并对未来的研究方向进行了展望。 适合人群:航空航天工程领域的研究人员、导弹系统设计师、从事飞行器控制研究的专业人士。 使用场景及目标:适用于希望深入了解导弹姿态控制原理及其仿真的专业人士,旨在提高导弹飞行性能和作战能力。 其他说明:文中提供的MATLAB代码仅为简化的示例,实际应用时需考虑更多复杂的因素和算法。

    scratch少儿编程逻辑思维游戏源码-电镀盒子.zip

    scratch少儿编程逻辑思维游戏源码-电镀盒子.zip

    基于DSP28335与STM32F407的锁相环程序在电源逆变系统中的应用及其实现

    内容概要:本文详细介绍了DSP28335与STM32F407在电源逆变系统中的锁相环(PLL)程序应用。首先概述了锁相环的基本概念及其在逆变系统中的重要性,然后深入探讨了DSP28335锁相环程序的特点和功能,如正弦波锁定、频率和相位跟踪、全桥逆变等功能。接着阐述了具体的实现步骤,包括系统配置、PLL算法选择、滤波器设计、正弦波生成与输出,最后进行了性能分析,强调了该程序在提高系统性能、稳定性和效率方面的优势。 适合人群:从事电力电子、嵌入式系统开发的技术人员,特别是对锁相环和逆变系统感兴趣的工程师。 使用场景及目标:适用于需要深入了解锁相环在电源逆变系统中应用的研发人员,旨在帮助他们掌握PLL的工作原理、实现方法及其优化技巧,以提高逆变系统的性能和可靠性。 其他说明:文中提供的技术细节和实现方法有助于读者更好地理解和应用锁相环技术,特别是在高频、高精度的逆变场合。

    scratch少儿编程逻辑思维游戏源码-Shape Smasher.zip

    scratch少儿编程逻辑思维游戏源码-Shape Smasher.zip

    少儿编程scratch项目源代码文件案例素材-审美乌托邦.zip

    少儿编程scratch项目源代码文件案例素材-审美乌托邦.zip

    少儿编程scratch项目源代码文件案例素材-潜水艇.zip

    少儿编程scratch项目源代码文件案例素材-潜水艇.zip

    scratch少儿编程逻辑思维游戏源码-3D忍者.zip

    scratch少儿编程逻辑思维游戏源码-3D忍者.zip

    新能源领域基于EMD-ARMA的风光出力预测方法及其应用

    内容概要:本文介绍了基于EMD-ARMA的组合风光出力预测方法,详细阐述了经验模态分解(EMD)和自回归移动平均(ARMA)模型的应用步骤。首先,通过EMD将原始发电数据分解为多个本征模态函数(IMF),然后用ARMA模型对各IMF分量进行建模和预测,最后将预测结果叠加重构,获得最终的风光功率预测值。文中还提供了简化的Python代码示例,帮助读者理解和实现该方法。 适合人群:从事新能源研究和技术开发的专业人士,尤其是对风光发电预测感兴趣的科研人员和工程师。 使用场景及目标:适用于需要提高风光发电预测精度的项目,旨在通过先进的数学模型优化电力调度和资源配置。 其他说明:本文提供的代码示例仅用于教学目的,实际应用中需根据具体情况调整和完善。此外,建议在实践中参考更多专业文献和寻求专家意见以确保预测模型的准确性和可靠性。

    scratch少儿编程逻辑思维游戏源码-宝石消消乐.zip

    scratch少儿编程逻辑思维游戏源码-宝石消消乐.zip

    少儿编程scratch项目源代码文件案例素材-染色奔跑.zip

    少儿编程scratch项目源代码文件案例素材-染色奔跑.zip

    Comsol仿真超构表面光子晶体动量空间拓扑荷识别图绘制指南

    内容概要:本文详细介绍了使用Comsol仿真软件绘制超构表面光子晶体动量空间拓扑荷识别图的方法。首先简述了超构表面光子晶体的基本概念及其重要性,然后逐步讲解了如何在Comsol中建立模型、设置仿真参数并运行仿真,最终生成动量空间拓扑荷识别图。文中还附有简单代码示例,帮助读者更好地理解整个流程。最后对所学内容进行了总结,并展望了未来的研究方向。 适合人群:对光学、物理学以及仿真软件感兴趣的科研人员和技术爱好者。 使用场景及目标:适用于希望深入了解光子在超构表面光子晶体中传播特性的研究人员,旨在提高他们对该领域的认识水平,促进相关科学研究的发展。 阅读建议:由于涉及较多专业术语和复杂概念,在阅读时建议先掌握基本理论知识,并结合实际案例进行练习,以便更好地消化吸收文中内容。

    基于CNN-LSTM与SE注意力机制的时序数据分析及应用(MATLAB实现)

    内容概要:本文介绍了一种结合卷积神经网络(CNN)、长短时记忆网络(LSTM)以及SE注意力机制的混合模型用于时序数据分类预测的方法,并提供了具体的MATLAB实现方法。文中详细解释了模型的工作流程,从卷积层的空间特征提取开始,经过SE注意力模块对特征进行加权处理,再到LSTM层的时间序列建模,最终完成分类任务。此外,还讨论了一些优化技巧,如数据预处理、动态学习率设置、特征压缩等,以提高模型性能。 适合人群:有一定机器学习基础的研究人员和技术开发者,特别是那些从事医疗健康、工业监控等领域时序数据分析工作的专业人士。 使用场景及目标:适用于需要高效处理复杂时序数据的应用场合,如医疗诊断、工业设备状态监测等。主要目的是为了改善传统单一模型在特征利用方面的局限性,提供一种更加精准有效的解决方案。 其他说明:文中提供的代码片段可以直接应用于实际项目中,只需根据具体情况调整参数配置和数据格式。同时提醒使用者关注数据预处理步骤,确保输入数据的质量和一致性对于获得良好结果至关重要。

    scratch少儿编程逻辑思维游戏源码-超级摇摆小猫.zip

    scratch少儿编程逻辑思维游戏源码-超级摇摆小猫.zip

    scratch少儿编程逻辑思维游戏源码-奔跑吧!糖豆人.zip

    scratch少儿编程逻辑思维游戏源码-奔跑吧!糖豆人.zip

    基于Python实现的旋翼无人机(UAV)六自由度动力学模型及其应用

    内容概要:本文档详细介绍了旋翼无人机(UAV)的动力学建模方法,重点在于六自由度模型的构建。首先定义了一个简化的四旋翼无人机动力学类,涵盖了质量、惯性矩阵、重力加速度等基本物理参数,并实现了推力矩阵的计算,用于将电机转速转化为推力和力矩。接着讨论了姿态更新过程中四元数的作用,提供了四元数更新的具体实现方式,强调了归一化操作的重要性。此外,还探讨了传感器噪声对飞行控制系统的影响,提出了一个较为真实的陀螺仪噪声模型,考虑到了随机游走特性和低通滤波效果。最后给出了一个简易的数值积分循环示例,展示了如何利用上述模型进行仿真。 适用人群:从事无人机研究、开发的技术人员,尤其是对飞行器动力学建模感兴趣的工程师。 使用场景及目标:适用于希望深入了解无人机内部工作原理的研究者和技术开发者,旨在帮助他们掌握从理论到实践的关键步骤,包括但不限于动力学建模、姿态控制、传感器误差补偿等方面的知识。 其他说明:文中提供的代码片段均为简化版本,实际应用中可根据具体需求调整参数设置和算法细节。同时推荐使用专业数学库来提高代码效率和准确性。

    少儿编程scratch项目源代码文件案例素材-女巫.zip

    少儿编程scratch项目源代码文件案例素材-女巫.zip

    FPGA数据采集系统的多技术集成:千兆以太网、SD卡存储、AD7606数模转换与串口通信

    内容概要:本文详细介绍了基于FPGA的数据采集系统,重点讨论了如何将其与多种关键技术集成,以提升数据采集和处理的效率与稳定性。首先,阐述了FPGA数据采集系统的特性及其重要性。接着,分别介绍了RTL8211千兆以太网控制器的应用,用于实现数据的快速传输;SD卡存储解决方案,确保数据的持久化保存;AD7606数模转换技术,保障信号的精准转换;最后,讲解了串口通信软件程序的设计与实现,促进不同设备间的通信。通过这些技术的集成,实现了对各类信号的实时采集、处理和传输。 适合人群:从事嵌入式系统开发的技术人员,尤其是对FPGA数据采集系统感兴趣的工程师和技术爱好者。 使用场景及目标:适用于需要高性能数据采集和处理的场合,如工业自动化、科研实验、环境监测等领域。目标是帮助技术人员理解和掌握如何利用FPGA搭建高效的多技术集成数据采集系统。 其他说明:文中不仅提供了理论介绍,还涉及实际应用案例和技术细节,有助于读者深入理解各组件的工作原理及其协同工作的机制。

Global site tag (gtag.js) - Google Analytics