hibernate 多对多关系(一)

什么是多对多关系呢?

关系数据库中两个表之间的一种关系, 该关系中第一个表中的一个行可以与第二个表中的一个或多个行相关。第二个表中的一个行也可以与第一个表中的一个或多个行相关。

比如在常见的订单管理数据库当中“产品”表和“订单”表之间的关系。单个订单中可以包含多个产品。另一方面,一个产品可能出现在多个订单中。

要表示多对多关系,就妖创建第三个表,称为 联接表,也称( 桥接表、中间表)。它多对多关系分Wie两个一对多关系。将连个主键都放在第三个表中,因此,第三个表记录关系的每个匹配项或实例。

不多说,我们实例来战:嘻嘻嘻

Example1:自关联查询 树形菜单表

TreeNode.jsp ,实现set/get方法

当前节点对父节点 多对一
父节点对子节点 一对多

entiey类

private Integer treeNodeId;
private String treeNodeName;
private Integer treeNodeType;
private Integer position;
private String url;

//	private Set children = new HashSet();//一对多
private List children = new ArrayList();//一对多,用List是为了可以排序
private TreeNode parent;//外键 多对多
private Integer IntiChildren = 0;

写TreeNode.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
	<!-- <set  name="children" cascade="save-update" inverse="true">
		<key column="parent_node_id"></key>
		<one-to-many class="com.zking.five.entity.TreeNode"/>
	</set> -->
	<!--bag 用于排序  order-by 指的是数据库中的表字段 -->
	<bag order-by="position" name="children" cascade="save-update" inverse="true">
		<key column="parent_node_id"></key>
		<one-to-many class="com.zking.five.entity.TreeNode"/>
	</bag>
	<many-to-one name="parent" class="com.zking.five.entity.TreeNode" column="parent_node_id"/>
</class>

写一个简单的dao

package com.zking.five.dao;

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.zking.five.entity.TreeNode;
import com.zking.two.util.SessionFactoryUtils;

public class TreeNodeDao {
public TreeNode get(TreeNode treeNode) {
Session session = SessionFactoryUtils.getSession();
Transaction transaction = session.beginTransaction();
TreeNode tn = session.get(TreeNode.class, treeNode.getTreeNodeId());
if(tn !=null && new Integer(1).equals(treeNode.getIntiChildren())) {
Hibernate.initialize(tn.getChildren());
}
//	System.out.println(tn);
transaction.commit();
session.close();
return tn;
}
}

用Junit测试

package com.zking.five.dao;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

import com.zking.five.entity.TreeNode;

public class TreeNodeDaoTest {
private TreeNodeDao treeNodeDao =new TreeNodeDao();
@Before
public void setUp() throws Exception {
}

@Test
public void testGet() {
	TreeNode treeNode = new TreeNode();
	treeNode.setTreeNodeId(1);
	treeNode.setIntiChildren(1);
	TreeNode tn = this.treeNodeDao.get(treeNode);
	System.out.println(tn.getTreeNodeId()+","+tn.getTreeNodeName());
	for(TreeNode tn2 : tn.getChildren()) {
		System.out.println(tn2.getTreeNodeId()+","+tn2.getTreeNodeName());
	}
		}
}

这样的原理是:

当加载一级节点时,ok
加载二级节点时,由于设置了强制加载,但同样可以加载所有的二级节点,ok
加载三级节点时,session关闭,并且默认采用的是懒加载

权限菜单加载有两种方式

1.一次性将数据库中的数据全部加载往浏览器返回(适用于菜单较少)
2、菜单表数据量较大,当出现浏览器卡顿的情况,第一种方式就不在使用。
采用第二种:菜单逐级加载。
Example2: 多对多级联查询 书籍表、书籍类别表

书籍可以对应多个类别,而类别也可以对应多本书,所以是多对多的关系。

Book表的主键:book_id category类别表的主键:category_id 而他们在连接表分别的主键是bid和cid

在Book.hbm.xml配置文件中 通过自动关联联接表,以及关联查询出关联对象。

<!-- 自动关联桥接表 -->
	<set table="t_hibernate_book_category" name="categorys" cascade="save-update" inverse="false">
		<!--one  bid 代表的是一对多的关系,也就是书籍对应的多个类别-->
		<key column="bid"></key>
		<!-- many  cid代表的是多对多的关系 去查类别表-->
		<many-to-many column="cid" class="com.zking.five.entity.Category"/>
	</set>
	
	
</class>

类别表的配置文件也是同一个道理

<?xml version="1.0" encoding="UTF-8"?>
	<set table="t_hibernate_book_category" name="books" cascade="save-update" inverse="true">
		<key column="cid"></key>
		<many-to-many column="bid" class="com.zking.five.entity.Book"/>
	</set>
</class>

总结:

在hibernate中,你只管查询当前表对象即可

基于粒子群优化算法的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参数调整机制,动手复现仿真流程以深入理解算法细节,并可进步扩展至其他智能算法或多智能体协同控制场景。
【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)内容概要:本文围绕“基于深度强化学习的微能源网能量管理与优化策略研究”展开,重点探讨了如何利用深度强化学习技术实现微能源网的能量优化调度。文中详细介绍了微能源网的系统架构与运行机制,构建了以经济性、环保性和能效性为目标的多目标优化模型,并采用深度强化学习算法进行求解,有效应对可再生能源出力波动与负荷不确定性带来的挑战。研究通过Python代码实现算法仿真,验证了该方法在降低运行成本、提升能源利用率和减少碳排放方面的优越性能,具备较强的实用价值与科研参考意义。; 适合人群:具备定Python编程基础,熟悉强化学习与能源系统优化的研究生、科研人员及从事智能电网、微能源网相关工作的技术人员。; 使用场景及目标:①应用于微电网、分布式能源系统的能量管理与调度优化;②为研究深度强化学习在能源系统中的落地提供代码实现与方法论支持;③服务于学术论文复现、课题研究或工程项目原型开发。; 阅读建议:建议结合文中提供的Python代码进行实践操作,重点关注状态空间、动作空间与奖励函数的设计逻辑,深入理解深度强化学习与能源系统建模的融合方式,并可通过调整参数或引入更多能源设备进行扩展研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值