Hibernate的一对多映射

Hibernate一对多映射 Hibernate级联映射前言关联1、概念2、关联的分类注意要点级联映射总结 前言 今天为大家分享的是Hibernate的映射,主要讲的是一对多的映射, hibernate的其他知识点之前就有提及过,以下是博客链接: 1、hibernate的初步介绍与学习 2、hibernate的入门 关联 1、概念 关联指的是类之间的引用关系。 如果类A与类B关联,那么被引用的类B将被定义为类A的属性。 public class A{ private B b = new B; 阅读详情

Hibernate的一对多映射

关联关系

什么是关联?

关联指的是类之间的引用关系。如果类A与类B关联, 那么被引用的类B将被定义为类A的属性。

为什么提到关联

所谓的一对多其实就是一个类当中将另一个类作为属性来使用。我们常见的一对多联系就是一个订单当中有多个订单项,而订单项也是一个有属性的类,且其是会定义为为订单的属性。

关联的分类

关联分为一对一、一对多、多对多、多对一、注意关联是有方向的。

一对多简单示例

我这边使用订单与订单项的关联关系来进行简单的示例,首先订单的实体类:

package com.zengjing.entity;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

public class Order implements Serializable{
	private Integer orderId;
	private String orderNo;
	
	//默认不用去初始化订单项
	private boolean initOrderItems=false;
	
	/*关联指的是类之间的引用关系。如果类Order与类OrderItem关联,
            那么被引用的类OrderItem将被定义为类Order的属性。:*/
	
	private Set<OrderItem>orderItems=new HashSet<>();
	
	public Set<OrderItem> getOrderItems() {
		return orderItems;
	}
	public void setOrderItems(Set<OrderItem> orderItems) {
		this.orderItems = orderItems;
	}
	public Order() {
		super();
	}
	public Integer getOrderId() {
		return orderId;
	}
	public void setOrderId(Integer orderId) {
		this.orderId = orderId;
	}
	public String getOrderNo() {
		return orderNo;
	}
	public void setOrderNo(String orderNo) {
		this.orderNo = orderNo;
	}
	public Order(Integer orderId, String orderNo) {
		super();
		this.orderId = orderId;
		this.orderNo = orderNo;
	}
	@Override
	public String toString() {
		return "Order [orderId=" + orderId + ", orderNo=" + orderNo + "]";
	}
	public boolean isInitOrderItems() {
		return initOrderItems;
	}
	public void setInitOrderItems(boolean initOrderItems) {
		this.initOrderItems = initOrderItems;
	}

	
}


OrderItem订单项的实体类:

package com.zengjing.entity;

import java.io.Serializable;

/**
 * 可以看做多对一
 */
public class OrderItem implements Serializable{

	private Integer orderItemId;
	private Integer productId;
	private Integer quantity;

	private Integer oid;
	
	private Order order;
	
	
	/*关联指的是类之间的引用关系。如果类OrderItem与类order关联,
            那么被引用的类order将被定义为类OrderItem的属性。:*/
	
	public OrderItem() {}

	public Integer getOrderItemId() {
		return orderItemId;
	}

	public void setOrderItemId(Integer orderItemId) {
		this.orderItemId = orderItemId;
	}

	public Integer getProductId() {
		return productId;
	}

	public void setProductId(Integer productId) {
		this.productId = productId;
	}

	public Integer getQuantity() {
		return quantity;
	}

	public void setQuantity(Integer quantity) {
		this.quantity = quantity;
	}

	public Integer getOid() {
		return oid;
	}

	public void setOid(Integer oid) {
		this.oid = oid;
	}

	public OrderItem(Integer orderItemId, Integer productId, Integer quantity, Integer oid) {
		super();
		this.orderItemId = orderItemId;
		this.productId = productId;
		this.quantity = quantity;
		this.oid = oid;
	}

	@Override
	public String toString() {
		return "OrderItem [orderItemId=" + orderItemId + ", productId=" + productId + ", quantity=" + quantity
				+ ", oid=" + oid + "]";
	}

	public Order getOrder() {
		return order;
	}

	public void setOrder(Order order) {
		this.order = order;
	}
	
	
}


配置实体类映射文件之Order.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
	<!-- 实体类映射文件 -->
	<hibernate-mapping>
		<class name="com.zengjing.entity.Order" table="t_order">
			<id name="orderId" type="java.lang.Integer" column="order_id">
				<generator class="increment"></generator>
			</id>
			<!-- 与实体类相匹配 -->
			<property name="orderNo" type="java.lang.String" column="order_no"/>
			<!-- 建立订单到订单项的一对多关联关系  
			
			
			1. lazy:默认值为true,true延迟加载,false立即加载(一般设置为true,不使用立即加载,因为影响查询性能)
		    2. outter-join:默认值为false,true使用左外联接查询关联的(但一般不用,因为当我们把该属性设置为true时,所有的查询语句都会默认左外联,那样性能不高)
		    3. inverse:默认值为false,true表示将对方设置为主控方(一对多双向关联中一般将多方设置为主控方,这样可以减少SQL语句的数量,减少多余的操作)
		    4. cascade:用来控制如何操作关联的持久化对象的(级联删除更新)
		    1. none:保存,更新或删除当前对象时,忽略其它关联的对象(注意:如果建立了关联关系,则不能使用此属性,报错:对象引用未保存的临时实例-保存临时实例)
		    2. save-update:保存、更新时级联保存所有的临时对象,并且级联更新关联的游离对象
		    3. delete:通过session的delete方法删除当前对象,级联删除关联的对象
		    4. all:等于save-update操作+delete操作
		    
		            注:级联删除不建议使用(cascade:delete)
			-->
			
			<!--set标签name:多的一方的对象集合的属性名称-->
			<set name="orderItems" inverse="true"  cascade="save-update,delete" >
			<!--key标签  column:多的一方的外键的名称  -->
			<key column="oid"></key>
            <!-- 从one到many的方向:操作one对象能同时操作many对象, class:多的一方的类的全路径 -->			
			 <one-to-many class="com.zengjing.entity.OrderItem"></one-to-many>
			</set>
		</class>
		
	</hibernate-mapping>

配置实体类映射文件之OrderItem.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
	<!-- 实体类映射文件 -->
	<hibernate-mapping>
		<class name="com.zengjing.entity.OrderItem" table="t_order_item">
			<id name="orderItemId" type="java.lang.Integer" column="order_item_id">
				<generator class="increment"></generator>
			</id>
			<!-- 与实体类相匹配 -->
			<property name="productId" type="java.lang.Integer" column="product_id"/>
			<property name="quantity" type="java.lang.Integer" column="quantity"/>
			 <!--1.注释 2.只读-->
			<property name="oid" type="java.lang.Integer" column="oid"  insert="false" update="false"  />
			<!-- 多对一关联关系  放置的是一方的对象 -->
			<!-- 
			name      :一方的对象的属性名称
			class     :一方的类的全路劲
			column    :在多方的表的外键的名称
			 -->
			 <!-- 从many到one的方向:操作many对象能同时操作one对象  -->
			<many-to-one name="order" class="com.zengjing.entity.Order" column="oid"/>
		</class>
	</hibernate-mapping>

注意要将实体类配置到核心文件当中!

其dao方法Junit测试:

package com.zengjing.dao;

import com.zengjing.entity.Order;
import com.zengjing.entity.OrderItem;
import junit.framework.TestCase;

public class OrderDaoTest extends TestCase {
	
	Order      order=null;
	OrderItem  orderItem=null;
	OrderDao   orderDao=new OrderDao();
	
	protected void setUp() throws Exception {
		order=new Order();
	}
    
	//增加订单
	public void testAddOrder() {
		order.setOrderNo("p20200729939");
		for (int i = 0; i < 3; i++) {
			orderItem=new OrderItem();
			orderItem.setProductId(i+1);
			orderItem.setQuantity(i+2);
			orderItem.setOrder(order);
			order.getItems().add(orderItem);
		}
		orderDao.addOrder(order);
	}	
}

结果:

在这里插入图片描述
关联的订单项:
在这里插入图片描述

Hibernate一对多关联映射(注解) NULL 博文链接:https://profound-accumulation.iteye.com/blog/2243079 立即下载

相关推荐

hibernate(一对多,多对一映射)操作

hibernate基于 一对多、多对一映射写的一个增加,查询,删除,修改的demo,内附数据库脚本

Hibernate一对多的关联映射,详解(代码+图解)与应用 举个栗子,搞的清楚

在开头跟大家分享的时候我就说,面试我是没有做好准备的,全靠平时的积累,确实有点临时抱佛脚了,以至于我自己还是挺懊恼的。(准备好了或许可以拿个40k,没做准备只有30k+,你们懂那种感觉吗)如何准备面试?1、前期铺垫(技术沉积)程序员面试其实是对于技术的一次摸底考试,你的技术牛逼,那你就是大爷。大厂对于技术的要求主要体现在:基础,原理,深入研究源码,广度,实战五个方面,也只有将原理理论结合实战才能把技术点吃透。

2401_84409344的博客 1193

PLC模拟量输入电路设计:±10V与±20mA信号调理全解析

在工业自动化和数据采集系统中,模拟量输入是连接物理世界与数字控制的核心桥梁。无论是变送器输出的4-20mA电流环,还是伺服驱动与信号发生器提供的±10V电压信号,PLC和采集模块都需要在复杂现场环境下稳定、精准地完成信号采集。理解信号体制的原理——电流环抗长线干扰、电压环响应快——是设计模拟输入前端的基础。通过精密电阻网络实现分压与采样,利用运放完成双极性到单极性的电平搬移,配合TVS与滤波电路保障可靠性,并经过ADC量化与校准流程,最终构建出兼顾精度、成本和工业级鲁棒性的完整信号链路。本文面向硬件工程师与

weixin_29163797的博客 297

Hibernate关联映射(一对多/多对多)

3.  Hibernate关联映射 上接Hibernate持久化类:https://blog.youkuaiyun.com/biggerchong/article/details/84260707 目录 3.  Hibernate关联映射 3.1 数据库表之间的关系 3.1.1 一对多关系 3.1.2 多对多关系 3.1.3 一对一关系(实际开发中使用较少) 3.2 实战Hibernate...

知飞翀的博客 1万+

恶意代码分析实战——使用Apatedns和Inetsim模拟网络环境

恶意代码分析实战——使用Apatedns和Inetsim模拟网络环境 注:本次实验主要是《恶意代码分析实战》一书中进入动态恶意代码分析篇章的开始,主要通过Apatedns以及Inetsim来模拟为恶意代码提供其需要的网络环境,本次实验以Lab01-03.exe为例。 一、实验环境及工具。 Vmware虚拟机:win10(win7)、kali 主要工具:Apatedns、Inetsim 二、工具的安装下载 1、Apatedns:需安装至windows虚拟机客户端(win10,win7均可) 下载地址:http

妙蛙种子吃了都会妙妙秒的妙脆角的博客 7935

Windows环境下ABAQUS、Fortran 编译器及Visual Studio的安装和关联

点击Continue,在随后的弹窗中勾选accept,并点击Customize(注意,在接下来的安装图片中,显示的版本号是2024.2,图片来自于一次失败的安装,懒得再截图了,步骤毫无区别,请见谅)。在下一步中,保持默认选项,之后软件会自动关联到刚才安装到visual studio,随后下一步进行安装(如果电脑中已经安装有其他版本的visual studio,则只保留2022)。在随后的弹窗中,根据指示找到。以防万一,尽量暂时退出所有杀毒软件,关闭防火墙,一般不会有影响,为确保万无一失,可以执行此步。

samurai12的博客 9949

Hibernate初探之一对多映射

1.一对多映射简介Hibernate的映射类型: 一对多 (one-to-many) 多对一 (many-to-one) 一对一 (one-to-one) 多对多 (many-to-many) 一对多映射 在数据库中,可以通过添加主外键的关联,表现一对多关系。那么在hibernate中该如何来表示呢?通过在一方来持有多方的集合实现,即在“一”的一端中使用<SET>元素表示持有多的一端的

不积跬步,无以千里 349

SGM5860x高精度ADC驱动开发与SPI接口实战指南

本文详细介绍了SGM5860x高精度ADC芯片的驱动开发与SPI接口配置实战。内容涵盖芯片特性、SPI通信设置、寄存器映射、驱动初始化、数据采集处理、校准优化及调试技巧,帮助开发者快速掌握国产24位ADC的应用,提升工业测量项目的精度与稳定性。

vvv99的博客 717

Hibernate一对多关系映射

Hibernate一对多关系映射 一对多联系 首先了解一下,什么是一对多联系 两个实体型之间的联系 实体间的关系 单向一对多关联 单向多对一关联 双向一对多关联 下面将会通过用户——订单的例子来进行讲解 在关系模型中,只存在外键参照关系,而且是many方参照one方 Hibernate单向一对多关联 User类 public class User { private Integer id; private String userName; private String password;

longzhanqing的博客 180

SoIC、CoWoS、InFO一次讲透:从2D/2.5D/3D看懂先进封装

先进封装是后摩尔时代提升芯片性能的关键路径,但面对SoIC、CoWoS、InFO这些名词,很多人容易混淆。理解它们,需从最基本的2D、2.5D、3D封装概念入手:2D是传统平房,2.5D通过硅中介层实现高密度互连,3D则让芯片直接堆叠。CoWoS作为2.5D中介层封装,已成为AI芯片与HBM高带宽存储集成的行业标准;SoIC通过铜-铜混合键合实现真正的3D堆叠,为逻辑与缓存提供极致带宽;InFO以扇出型封装兼顾成本与集成度,广泛用于移动SoC。在系统级封装(SiP)和CPO共封装光学等前沿趋势中,这些技术往

weixin_42388898的博客 310

自然语言处理NLP星空智能对话机器人系列:Gavin大咖 Transformer 101问答集 第一问

自然语言处理NLP星空智能对话机器人系列:Transformer 101问答 [让天下没有难学的Transformer] 你问我答系列之一 Gavin大咖第一问: Transformer中的可训练Queries、Keys和Values矩阵从哪儿来? 以上是智华解答,供同学们参考。 星空智能对话机器人系列博客 NLP星空智能对话机器人系列:第二次星空智能对话机器人Zoom线上演示安排 NLP星空智能对话机器人系列:StarSpace: Embed All The Things NLP星空智能对

大模型与Agent智能体 991

【Hibernate】——一对多映射

正如上篇【Hibernate】——多对一映射 所说,一对多映射是多对一的反例,一个班有多个学生,这就是一种一 对多的体现。如图所示:           建立Class实体类,在Class建立Student的集合关系: package com.bjpowernode.hibernate; import java.util.Set; /** * 建立Class实体类 * @au

努力成为自己的榜样。 642

[SoC]SoC验证中bootcode与firmware相关验证经验总结

本文总结了SoC验证中bootcode和firmware的验证经验。重点介绍了两种数据加载方法:1)使用Verilog系统函数$readmemh/$readmemb直接写入ROM/ARAM,需注意文件路径、格式和斜杠方向;2)通过Memory Hierarchy在initial块中操作,需要添加适当延时并注意路径拼接。文章还提供了在testcase phase中先读取数据到HASH再写入SRAM的示例,并强调加载后需使能edc_bypass以避免ECC错误。验证过程中需特别注意文件位置、格式要求及路径处理等

元直的博客 2497

Hibernate一对多映射示例注释

Hibernate一对多映射示例注释 今天我们将研究Hibernate中的One To Many Mapping。我们将使用Annotation和XML配置来研究Hibernate One To Many Mapping示例。 目录[隐藏] 1Hibernate中的一对多映射 1.1Hibernate中的一对多映射 - 数据库设置 1.2Hibernate一对多...

YunWisdom 301

mojoPortal 路径穿越漏洞复现(CVE-2025-28367)(附脚本)

 在 mojoPortal CMS 版本 <=2.9.0.1 中发现了一个导致 ViewState 反序列化的目录遍历漏洞。通过利用此问题,未经身份验证的攻击者可以泄露 Web 根目录中的敏感文件,包括应用程序的文件。此配置文件包含用于验证和解密 ViewState 数据的文件。知道此密钥后,网络攻击者可以构建恶意 ViewState 有效负载,从而导致在底层服务器上执行远程代码。(CVE-2025-28367)

iSee857的博客 500

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Hibernate 一对多映射

Hibernate 一对多映射(单向查询/双向查询) &gt;&gt;  查询一个学校(School)中的所有学生(Student)姓名信息。   实现过程 1. Stduent.java         加入School对象,用于表明本学生的学校信息。 package com.java1234.hibernate.model; public class Student { ...

R812656252的博客 281

STM32F407中文手册

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

hibernate注释映射_Hibernate一对多映射示例注释

hibernate注释映射Today we will look into One To Many Mapping in Hibernate. We will look into Hibernate One To Many Mapping example using Annotation and XML configuration. 今天,我们将研究Hibernate中的一对多映射。 我们将研究使用...

从零开始的教程世界 302

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Hibernate详解(2)——一对多映射分析

在学习Hibernate的时候,很大一部分任务量是配置实体映射关系,Hibernate的映射关系的关键就是掌握面向对象的思想,搞清楚实体之间的关系。每一个实体关系都对应这UML中的对象关系。我们配置这些对象的关系模型。下面分节讲述Hibernate的关系映射。 本节主要讲述Hibernate的一和多的关系。之所以称之为一和多的关系,是因为他包括三种关系:单向一对多,单向多对一,双向一对多。我这里统

李守宏 7364

hibernate之一对多映射

hibernate之一对多映射

jvm 1133

Hibernate一对多映射_慕课网笔记

一、 简介 Hibernate的映射类型(最常用为一对多和多对一映射):  一对多 (one-to-many)  多对一 (many-to-one) 一对一 (one-to-one) 多对多 (many-to-many) 二、单向一对多关联 1. 定义 就像班级和学生。站在班级的角度看。班级和学生就是一对多的关系,班级为一方,学生为多方且是单向的。 如何实现这种关系?

xjy_1666的博客 724

HIbernate一对多映射

1、hibernate的关联映射分为   一对多  one-to-many   多对一  many-to-one   一对一  one-to-one   多对多  many-to-many 2、一对多映射简介   比如一个班级对应多个学生     数据库中的表达就是:学生表中添加一个外键指向班级表   hibernate中就是在一的一端中用<set>...

bantang2895的博客 180

mysql 一对多映射_Hibernate一对多映射关系详解(附带实例)

在三种关联关系中,一对多(或多对一)是最为常见的一种关联关系,一对多映射关系是由“多”的一方指向“一”的一方。在表示“多”的一方的数据表中增加一个外键,指向“一”的一方的数据表的主键,“一”的一方称为主表,而“多”的一方称为从表。以班级和学生的关联关系为例,班级表与学生表的关联关系如图 1 所示。图 1班级表和学生表的关联关系在图 1 中,grade 表为班级表,id 为班级表的主键,name...

weixin_42615743的博客 647

Hibernate在一对多映射下集合Set,List,Map的配置

1.Set 1).在set的情况下.hbm.xml的常规配置如下 <!--下面的这个列专门用来存放地址 下面记住因为是集合所以集合中的数据的数据类型必须要写 否则报错 -->

GuominJin的博客 1536

慕课网Hibernate初探之一对多映射实验及总结

慕课网Hibernate初探之一对多映射实验及总结 一、本课核心 * 1、如何在MyEclipse中使用Hibernate * 2、如何实现Hibernate中一对多的映射 * 3、如何创建Session对象 * 4、Hibernate如何使用增删改查 1、如何在MyEclipse中使用Hibernate * Hibernat框架创建 * MyEclipse2016 CI 7版本 * ...

weixin_34388207的博客 104

Hibernate中 多对一,一对多映射关系分析详解

1 多对一   站在多的一方思考问题: 关联映射 分析 1表结构:唯一 1-N外键关联 外键设置在从表中 客户信息userinfo , 收件人recipieninfo  一个客户有多个收件人: 多的一方收件人拥有客户的id 2对象结构 public class Recipieninfo implements java.io.Ser

咖啡 2061

hibernate 单向一对多映射

好久没用j2ee开发呢,昨天写呢一个hibernate的映射,几次出现异常,翻呢一遍书熟悉呢一下才搞定,这里把几种常用的映射放上来,希望大家方便查找: 作者:waitbin 一:hibernate 单向一对多映射 一个team 对应多个student; (一):hibernate.cfg.xml     PUBLIC "-//hibernate/hibernate Configuration ...

waitbin 115
上一篇: hibernate一级缓存及二级缓存及ehcache的简单测试
下一篇: vue入门
Jiang呀
博客等级 码龄7年 16粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值