hibernate之多对多

hibernate多对多查询 hibernate多表查询 分析表关系 1.多对多 1.1创建实体类 客户和联系人的关系 import java.util.HashSet; import java.util.Set; /* * CREATE TABLE `sys_user` ( `user_id` bigint(32) NOT NULL AUTO_INCREMENT COMM... 阅读详情

1.在hibernate中最为复杂的就是多对多的关系,可以把你绕晕,也是hibernate框架它之所以在公司中很少用到的原因之一。 

2.说说多对多的小思路,在这还是要以一个案例来说。例如:产品与供应商,一个产品不止一个供应商,一个供应商也不知一个产品,都是多对多的关系,那tiny就用这个案例给大家讲讲。

3.代码演示:

<1>

product产品类:

package com.tiny.entity;

import java.util.HashSet;
import java.util.Set;

public class Product {
	private int product_no;//编号
	private String product_name;//产品名称
	private int product_price;//产品价格
	
	private Category  category;//类别表
	
	Set<Supply> supply=new HashSet<Supply>();//供应商表
	
	
	public Set<Supply> getSupply() {
		return supply;
	}

	public void setSupply(Set<Supply> supply) {
		this.supply = supply;
	}

	public Category getCategory() {
		return category;
	}

	public void setCategory(Category category) {
		this.category = category;
	}

	public Product() {
		super();
	}
	

	public Product(String product_name, int product_price) {
		super();
		this.product_name = product_name;
		this.product_price = product_price;
	}

	public void setProduct_price(int product_price) {
		this.product_price = product_price;
	}

	public int getProduct_no() {
		return product_no;
	}
	public void setProduct_no(int product_no) {
		this.product_no = product_no;
	}
	public String getProduct_name() {
		return product_name;
	}
	public void setProduct_name(String product_name) {
		this.product_name = product_name;
	}

	public int getProduct_price() {
		return product_price;
	}
	
}

product映射:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate 

Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-8-23 18:09:26 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.tiny.entity.Product" table="PRODUCT">
        <id name="product_no" type="int">
            <column name="PRODUCT_NO" />
            <generator class="native" />
        </id>
        <property name="product_name" type="java.lang.String">
            <column name="PRODUCT_NAME" />
        </property>
        <property name="product_price" type="int">
            <column name="PRODUCT_PRICE" />
        </property>
        <many-to-one name="category" class="com.tiny.entity.Category" 

column="category_id"></many-to-one>
        

<!--多对多的关系-->
<set name="supply" table="p_s">
            <key>
                <column name="PRODUCT_NO" />
            </key>
            <many-to-many class="com.tiny.entity.Supply"  

column="supply_no"/>
        </set>
    </class>
</hibernate-mapping>

<2>

supply供应商的类:

package com.tiny.entity;

import java.util.HashSet;
import java.util.Set;

public class Supply {
	private int supply_no;//编号
	private String supply_name;//商品名称
	private String supply_descn;//商品的描述
	
	private Set<Product>product=new HashSet<Product>();// 商品的集合
	
	public Set<Product> getProduct() {
		return product;
	}
	public void setProduct(Set<Product> product) {
		this.product = product;
	}
	public int getSupply_no() {
		return supply_no;
	}
	public void setSupply_no(int supply_no) {
		this.supply_no = supply_no;
	}
	public String getSupply_name() {
		return supply_name;
	}
	public void setSupply_name(String supply_name) {
		this.supply_name = supply_name;
	}
	public String getSupply_descn() {
		return supply_descn;
	}
	public void setSupply_descn(String supply_descn) {
		this.supply_descn = supply_descn;
	}
	
	public Supply() {
		super();
	}
	public Supply(String supply_name, String supply_descn) {
		super();
		this.supply_name = supply_name;
		this.supply_descn = supply_descn;
	}
	
	
	
	

}


supply.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">
<!-- Generated 2017-8-23 18:09:26 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.tiny.entity.Supply" table="SUPPLY">
        <id name="supply_no" type="int">
            <column name="SUPPLY_NO" />
            <generator class="native" />
        </id>
        <property name="supply_name" type="java.lang.String">
            <column name="SUPPLY_NAME" />
        </property>
        <property name="supply_descn" type="java.lang.String">
            <column name="SUPPLY_DESCN" />
        </property>


<!--多对多的关系-->
        <set name="product" table="p_s" cascade="save-update">
            <key>
                <column name="SUPPLY_NO" />
            </key>
            <many-to-many class="com.tiny.entity.Product"  

column="product_no"/>
        </set>
    </class>
</hibernate-mapping>

test:测试演示:

package com.tiny.test;

import java.util.List;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.tiny.entity.Category;
import com.tiny.entity.Product;
import com.tiny.entity.Supply;

public class ManyManyTest {
	
	private Configuration configuration;
	private SessionFactory sessionFactory;
	private Session session;
	private Transaction transaction;

	@Before
	public void before(){
		configuration = new Configuration().configure();
		sessionFactory = configuration.buildSessionFactory();
		session = sessionFactory.openSession();
		transaction = session.beginTransaction();
	}
	
	@After
	public void after(){
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

	
	@Test
	public void addProduct(){
		//一个的新商品:
		//名称为"Compaq 2620"
		//该商品属于"笔记本"类别1
		//由当前所有的提供商提供货源
//		Product product=new Product("Compaq 2620", 100);
//		Category cate=(Category) session.createQuery("from Category where category_name='笔记本'").uniqueResult();
//		cate.getProduct().add(product);
//		List<Supply> supply=session.createQuery("from Supply").list();
//		for (Supply supply2 : supply) {
//			supply2.getProduct().add(product);
//		}
	}
	
	@Test
	public void queryProductsBySupply(){
		//查询编号为" 1"的提供商提供的所有商品
//		 Supply supply=(Supply) session.createQuery("from Supply where supply_no=1").uniqueResult();
//		 Set<Product> pro=supply.getProduct();
//		 for (Product product : pro) {
//			System.out.println("1的提供商提供的所有商品:"+product.getProduct_name());
//		}
		
	}
	
	@Test
	public void addProductRel(){
		//添加名称为"测试"的类别
		//同时添加属于该类别的一个商品,商品编号为"P9001",名称为"测试商品"
		//并同时添加提供该新产品一个供应商,供应商的编号为"2",名称为"海尔"
//		Category cate=new Category("测试", "测试类商品");
//		session.save(cate);
//		Product product=new Product("测试商品", 100);
//		Category category=(Category) session.createQuery("from Category where category_name='测试'").uniqueResult();
//		category.getProduct().add(product);
//		Supply supply=(Supply) session.createQuery("from Supply where supply_no=2 and supply_name='海尔'").uniqueResult();
//		supply.getProduct().add(product);
		
	}
	
	@Test
	public void addSupplyRel(){
		//添加编号为"S9002",名称为"百脑汇"的供应商
		//并同时添加该供应商提供的一个商品,该商品编号为"P9002",名称为"kodako"
		//同时添加新商品所属的名称为"新型数码
//		Supply supply=new Supply("百脑汇", "百脑汇商家");
//		Product product=new Product("kodako",123);
//		supply.getProduct().add(product);
//		Category cate=new Category("新型数码", "新型数码的描述");
//		cate.getProduct().add(product);
//		
//		session.save(cate);
//		session.save(supply);
	}


}

好了,多对多的演示就到此结束啦




从零到英雄:WSL2与Ubuntu22.04的终极性能调优指南 本文详细介绍了如何在Windows系统中通过WSL2与Ubuntu22.04进行性能调优,涵盖内核定制、GPU加速、网络优化等关键技巧,帮助开发者打造媲美原生Linux的高性能开发环境,特别适合AI训练和大数据处理等资源密集型任务。 阅读详情

相关推荐

SLUB DEBUG 检测slab 内存泄漏

文章介绍如何定位linux 内核中slab 内存泄漏。

一叶知秋的博客 1491

Hibernate中的多对多关联

源自 imooc 的学习        多对多关联是一种常见的关联关系。多对多关联关系一般采用中间表的形式来实现,即新增一张包含关联双方主键的关联表。那么,在Hibernate中如何实现多对多的关联关系呢?        多对多关联可以使用元素和元素进行配置。具体如下: 1)需要在数据库底层通过添加中间表来指定关联关系; 2)在双方的实体中添加一个保存对方的集合; 3)在双方的映射文件中

梦空间 1007

用LTspice仿真CMOS反相器功耗?这份避坑指南能省你3天调试时间

本文详细介绍了如何使用LTspice准确仿真CMOS反相器的功耗,包括动态功耗、短路功耗和静态功耗的测量技巧。通过工程实践指南,帮助电子工程师避开常见陷阱,优化仿真参数设置,提升仿真结果的可靠性,节省调试时间。

w7x8y9z的博客 190

在 JPA 和Hibernate中映射多对多关系的 6 种方法

连接实体将使用 1 个用 @EmbeddedId 标记@Embeddable对象字段和 2 个用@MapsId标记的@ManyToOne来定义,这些字段指向@Embeddable类中定义的关键字段。在双向映射的情况下,如果需要快速导航并将 CRUD 操作级联到子集合关联,请将@OneToMany放在父实体上,如上述方法 2。有几种方法可以通过使用@ManyToMany、@OneToMany和@ManyToOne来映射 JPA 和Hibernate中的多对多关系,包括。此映射不会使用任何联接的实体。

allway2的博客 708

避坑指南:Unity新版InputSystem在移动端的5个常见问题及解决方案

本文针对Unity新版InputSystem在移动端开发中的常见问题,提供了5个关键解决方案,包括虚拟摇杆灵敏度调节、多点触控冲突处理、按钮反馈延迟优化、手势识别与陀螺仪数据融合以及Android/iOS平台差异处理。这些实战经验帮助开发者高效解决触控适配难题,提升移动游戏体验。

soda5的博客 405

优雅谈大模型:“System2”与“System 1”

研究人员探索了三种System 2方法——RaR、S2A 和 BSM,这些方法已经成功提炼到新的LLM,这个新的模型与System 1相比,产生了更好的结果,而且成本低于System 2。然而这种方法是有局限性,只能适用于特定的任务。

鲁班模锤 5165

Hibernate框架基础——多对多关联关系映射

多对多关联关系映射多对多的实体关系模型也是很常见的,比如学生和课程的关系。一个学生可以选修多门课程,一个课程可以被多名学生选修。在关系型数据库中对于多对多关联关系的处理一般采用中间表的形式,将多对多的关系转化成两个一对多的关系。 为了详细介绍多对多关联关系映射,终究还是应以一个例子来说明比较印象深刻。我们以老师和学生的关系为例来说明这种多对多关联关系映射。双向多对多我们最好新建一个普通java工程

李阿昀的博客 1467

Teams会议翻译对比测试:Copilot同传 vs 人工翻译,结果出乎意料

本文通过对比测试Microsoft 365 Copilot的实时翻译与专业人工翻译在Teams会议中的表现,揭示了AI同传技术在准确率、响应速度和多语言切换方面的优势与局限。实验数据显示,Copilot在常规商务场景下接近人工翻译水平,且成本效益显著,但在专业术语和文化特定表达上仍需人工辅助。

weixin_29054195的博客 224

Hibernate的多对多操作

以商品和订单为例子一、创建实体类商品和订单二、让两个实体类互相表示1&gt;一个订单可以有多个商品,用set集合private Set&lt;GoodsOrder&gt; goodsOrderSet = new HashSet&lt;GoodsOrder&gt;();2&gt;一个商品可以属于多个订单,用set集合private Set&lt;Goods&gt; goodsSet = new Ha...

haiyangzhou01的博客 268

数据获取竟如此简单——全球SRTM 90m DEM V4.1数据

SRTM(Shuttle Radar Topography Mission)是由NASA联合国际合作伙伴开展的雷达地形测绘项目,通过航天飞机搭载的合成孔径雷达系统,于2000年通过发射并接收地表反射的雷达信号,获取全球三维地形数据,这一任务填补了高精度全球地形数据的空白。而本文通过十余行的python代码,就更简单、方便地获取这些数据。

m0_38065162的博客 1400

Unity零基础到入门 ☀️| 基础知识入门篇章,看完就可以做游戏啦! | 寻找C站宝藏

Unity入门基础知识。本篇文章介绍了关于Unity入门的一些基础知识,包括基本概念和使用实例。简单易上手,轻松实现Unity入门操作!

努力前行,总会成为自己心中的那道光 1万+

SpringBoot与Hibernate整合 一对多,多对多(实例)

简介 一对多: 在一对多双向关联时,在一的一方需要设置@OneToMany和mappedby,在多的一方需要设置@ManyToOne和@JoinColumn 多对多: 在多对多双向关联时,在控制的一方设置@ManyToMany和@JoinTable,在另一方需要设置@ManyToMany和mappedby Demo目录 数据表 核心代码 application.properties #自己的数...

小夏陌的博客 7381

am62x A53与R5F通信

AM62x是Ti的一款异构多核芯片。remoteproc驱动,硬编码(写死)了R5F/M4F固件的名字,这样驱动启动时,就会找硬件编码的固件,下面是其对应关系。值得注意的是,linux内核中的M4F remoteproc驱动启动M4F,而linux内核中的R5F remoreteproc驱动不启动R5F,相反,它attach到已经在boot阶段启动的R5F固件上。在/lib/firmware的真实固件名:,而我们生成的固件名如下所示,没有直接对应的,经确认,.out文件就是我们需要的,重命名后即可。

鹰之翔 1363

Hibernate之多对多

数据库的多对多(点击查看一对多的关联关系) 数据库中不能直接映射多对多 处理:创建一个桥接表(中间表),将一个多对多关系转换成两个一对多 注1:数据库多表联接查询,永远就是二个表的联接查询 注2:交叉连接 注3:外连接:left(左)/right(右)/full(左右) 主从表:连接条件不成立时,主表记录永远保留,与null匹配 例如三表:A B AB select * from A,B,AB...

TangXS的博客 275

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Hibernate多对多

Hibernate多对多 数据库的多对多: 数据库中不能直接映射多对多 处理:创建一个桥接表(中间表),将一个多对多关系转换成两个一对多 注:数据库多表联接查询,永远就是二个表的联接查询 hibernate的多对多: hibernate可以直接映射多对多关联关系(看作两个一对多) 多对多关系注意事项:一定要定义一个主控方 讲解下一对多的自联: TreeNode.hbm.xml <?xml v...

weixin_43710113的博客 444

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

hibernate的多对多

1. 数据库的多对多 1.1 数据库中不能直接映射多对多 处理:创建一个桥接表(中间表),将一个多对多关系转换成两个一对多 注1:数据库多表联接查询 永远就是二个表的联接查询 A B C D t1 C D t2 D t3 注2:交叉连接 注3:外连接:left(左)/right(右)/full(左右) 主从表:连接条件不成立时,主表记录永远保留,与

weixin_46705150的博客 499

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

hibernate多对多 多对多

  Hibernate多对多示例                                                                        您要打印的文件是:Hibernate多对多示例                                                     打印本文             

huangchongyy的专栏 557

hibernate中的关联之多对多

hibernate中的关联之多对多一、数据库的多对多1.1 数据库中不能直接映射多对多二、 hibernate的多对多2.1 hibernate可以直接映射多对多关联关系(看作两个一对多)三、多对多关系注意事项3.1 一定要定义一个主控方3.2 多对多删除3.2.1 主控方直接删除3.2.2 被控方先通过主控方解除多对多关系,再删除被控方3.2.3 禁用级联删除3.3 关联关系编辑,不需要直接操作桥接表,hibernate的主控方会自动维护示例1:新增一本书及书本类型示例2:新增一本书及已有的书本类型示例3

qq_47906421的博客 163

hibernate多对多

hibernate多对多什么是自关联实体类 以及 配置文件dao方法以及测试多对多关联关系实体类实体类的配置文件dao以及测试 什么是自关联 跟原来的一对多差不多,原来是需要两个实体类,两个配置文件。现在一个实体类一个配置文件。 我们少说话,多做事就拿菜单表做一个例子: 下面这个表就是我们要做的,系统管理下面有字典管理,用户管理,角色管理,权限管理,而权限管理下面又有用户分配角色,角色授予用户...

what_where的博客 168

Hibernate 多对多关系

Hibernate 多对多关系 环境 java 12.0.1 Apache Maven 3.6.3 MySQL Server version: 5.7.18-20170830-log 20170531 hibernate-core-5.4.27.Final.jar mysql-connector-java-8.0.21.jar IntelliJ IDEA 2020.2.3 (Ultimate Edition) Maven配置文件 <?xml version="1.0" encoding="UTF-8

qq_44486439的博客 2103

java hibernate 多对多_hibernate的多对多关联映射

在我们实际项目中,多对多的情况也时长存在,比如最常见的就是系统管理的五张表,如下面的一个结构:在本文学习hibernate多对多关联映射的实验中我简单的写几个字段,达到学习目的即可。1.多对多的关系表达1.关系型数据库(RDB)中的表达:2.Java实体中的表达3.orm配置文件中的表达:(注意每次添加了ORM映射文件都要加到主配置文件中)User.hbm.xml/p>"-//Hiberna...

weixin_36302331的博客 271

Hibernate多对多操作

---------------------siwuxie095                         Hibernate 多对多操作       以用户和角色为例          (一)多对多映射配置    第一步:创建两个实体类,用户和角色             第二步:让两个实体类之间互相表示    (1)在用户实体类中表示多

siwuxie095's blog 555

hibernate多对多配置

建表 use hibernate_day03; CREATE TABLE `sys_user` ( `user_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '用户id', `user_code` varchar(32) NOT NULL COMMENT '用户账号', `user_name` varchar(64) NOT NULL...

zhang__liuchen的博客 365

hibernate 多对多操作删除

hibernate 多对多操作 关键字: hibernate 多对多操作 多对多的两种映射形式: 一。映射多对多关系 老师Teacher 与 课程Course 是一个多对多的关系,XMl配置如下。 三个表的表结构 1. tbl_course.sql     create table "SCOTT"."TBL_COURSE"(       ...

qingfengxia2013的专栏 209

hibernate多对多关系配置

1. 数据库的多对多 1.1 数据库中不能直接映射多对多 处理:创建一个桥接表(中间表),将一个多对多关系转换成两个一对多 注1:数据库多表联接查询 永远就是二个表的联接查询 A B C D t1 C t2 D t3 注2:交叉连接 注3:外连接:left(左)/right(右)/full(左右) 主从表:连接条件不成立时,主表记录永远保留,与null匹配 在hiber...

zhoutubing的博客 240

hibernate的多对多解析

问题?hibernate的多对多的解析 环境:先搭建hibernate环境 注:在这里我们选择,由持久化类和映射文件来生成表(因为这样做的话,只在多对多的两个之间生成一个中间表。共三张表)。如果由表来生成持久化类和映射文件的话,它会生成一个联合组件类。相对来说在操作上。困难度加大了,也复杂化了。 案例: 先写两个持久化类和相应的映射文件 Course.java package cn.i

Mr_li13的博客 712
上一篇: hibernate之一对多
下一篇: Spring基础学习之一:spring插件的添加与配置
张小卿-
博客等级 码龄10年 41粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值