hibernate双向一对多关联

Android逆向分析 Android 逆向开发是指对已发布的 Android 应用进行分析和破解,以了解应用程序的内部工作原理,获取应用程序的敏感信息,或者修改应用程序的行为。Android应用 Java编写的,利用Android SDK编译代码,并并且把所有的数据和资源文件打包成一个APK(Android Package)文件这是一个后缀名为.apk的压缩文件,apk文件中包含了一个Anddroid应用程序的所有内容,是Android平台用于安装应用程序的文件。 阅读详情

测试脚本:

create table PERSON1
(
  PERSONID  NUMBER(10) not null,
  ADDRESSID NUMBER(10)
)

create table ADDRESS1
(
  ADDRESSID NUMBER(10) not null
)

person.hbm.xml:

<class name="com.chenjun.eshop.staffManage.domain.Person"
		table="Person1">

		<id name="id" column="personId">
			<generator class="assigned"><!-- 由程序分配主键 -->

			</generator>
		</id>
		
		 <many-to-one name="address" column="addressid" not-null="true"></many-to-one>

		
	</class>

address.hbm.xml:

<class name="com.chenjun.eshop.staffManage.domain.Address"
		table="Address1">

		<id name="id" column="addressId">
			<generator class="assigned"><!-- 由程序分配主键 -->
			</generator>
		</id>
		
		<set name="persones" inverse="true">
			<key column="addressId" />
			<one-to-many class="com.chenjun.eshop.staffManage.domain.Person" />
		</set>

	</class>

测试代码:

 public void test()
    {
      

        Session session = this.getHibernateTemplate().getSessionFactory().openSession();
        session.beginTransaction();
       
        
        
        Address address = new Address();
        address.setId(307);
        
        session.save(address);  //一方对象要先保存,不然在后面save时,会报找不到对象异常

        Person person1  = new Person();
        person1.setId(111);
        person1.setAddress(address);
        session.save(person1);
        
        Person person2  = new Person();
        person2.setId(222);
        person2.setAddress(address);
        session.save(person2);
        
        Person person3  = new Person();
        person3.setId(333);
        person3.setAddress(address);
        session.save(person3);
        //hibernate中的增删改都要提交事件,因为它默认是设为不提交的,而jdbc的connect是默认提交的。
        session.beginTransaction().commit();

        //释放资源
        session.close();

    }

上面的代码,是在多的一方进行维护的,先insert一的一方,再insert多的一方

下面测试在一的一方来维护

sql脚本不变

<class name="com.chenjun.eshop.staffManage.domain.Address"
		table="Address1">

		<id name="id" column="addressId">
			<generator class="assigned"><!-- 由程序分配主键 -->
			</generator>
		</id>
		
		<set name="persones" inverse="false"> <!-- 这里默认的,由一端来维护关系,如果设置为true,则是由多端来维护关系 -->
			<key column="addressId" />
			<one-to-many class="com.chenjun.eshop.staffManage.domain.Person" />
		</set>

	</class>

<class name="com.chenjun.eshop.staffManage.domain.Person"
		table="Person1">

		<id name="id" column="personId">
			<generator class="assigned"><!-- 由程序分配主键 -->

			</generator>
		</id>
		
		 <many-to-one name="address" column="addressid"></many-to-one>

注意上面的<many-to-one>里不要加not-null="true",这样会报错
not-null property references a null or transient value

测试代码:

 public void test()
    {
      

        Session session = this.getHibernateTemplate().getSessionFactory().openSession();
        session.beginTransaction();
       
        Set<Person> persones = new HashSet<Person>();
     

        Person person1  = new Person();
        person1.setId(11112);
        session.save(person1);  //和在多的一方维护是一样的,都要先save,要不然,是维护不了多的一方的。
        
        Person person2  = new Person();
        person2.setId(22222);
        session.save(person2);
        
        Person person3  = new Person();
        person3.setId(33332);
        session.save(person3);
        
        
        persones.add(person1);
        persones.add(person2);
        persones.add(person3);
        
        
        Address address = new Address();
        address.setId(401);
        address.setPersones(persones);
        session.save(address);  
        
        //hibernate中的增删改都要提交事件,因为它默认是设为不提交的,而jdbc的connect是默认提交的。
        session.beginTransaction().commit();

        //释放资源
        session.close();

    }

由于是一方来维护,所以先执行多方的insert,再执行一方的sql,与多方维护是相反的,注意,对一方或者多方的对象都要先save()。

后台执行如下:

00:55:30,388 DEBUG SQL:111 -<span style="background-color: rgb(204, 204, 204);"> <span style="color:#FF6666;">insert into Person1 (addressid, personId) values (?, ?)</span></span>
00:55:30,399 DEBUG AbstractBatcher:248 - reusing prepared statement
00:55:30,399 DEBUG SQL:111 -<span style="color:#FF6666;"> insert into Person1 (addressid, personId) values (?, ?)</span>
00:55:30,400 DEBUG AbstractBatcher:248 - reusing prepared statement
00:55:30,400 DEBUG SQL:111 - <span style="color:#FF6666;">insert into Person1 (addressid, personId) values (?, ?)</span>
00:55:30,401 DEBUG AbstractBatcher:66 - Executing batch size: 3
00:55:30,403 DEBUG Expectations:77 - success of batch update unknown: 0
00:55:30,405 DEBUG Expectations:77 - success of batch update unknown: 1
00:55:30,406 DEBUG Expectations:77 - success of batch update unknown: 2
00:55:30,406 DEBUG AbstractBatcher:418 - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
00:55:30,407 DEBUG AbstractBatcher:410 - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
00:55:30,407 DEBUG SQL:111 -<span style="color:#FF0000;"> insert into Address1 (addressId) values (?)

</span><pre name="code" class="java">00:55:30,411 DEBUG SQL:111 - update Person1 set addressId=? where personId=?
00:55:30,411 DEBUG AbstractBatcher:248 - reusing prepared statement
00:55:30,412 DEBUG SQL:111 - update Person1 set addressId=? where personId=?
00:55:30,412 DEBUG AbstractBatcher:248 - reusing prepared statement
00:55:30,413 DEBUG SQL:111 - update Person1 set addressId=? where personId=?



在实际中,还是在多方维护较好,因为它是自己来设置的外键,没有执行上面的update操作,上面的update操作需要执行完多方insert,一方insert后,再去update多方的外键

Alist/Openlist 的 WebDAV 老是连不上?别再乱试了,这才是标准答案!(1Panel如何使用Alist/Openlist作为备份账号) 😫服务器硬盘告急,想用 Alist/Openlist 的 WebDAV 备份却屡屡失败?别慌!本文带你揭秘正确的连接地址和权限配置,手把手教你搞定 1Panel 备份设置,让你的网盘秒变备份仓库! 阅读详情

相关推荐

Godot4 TileMap分层绘制全攻略:解决角色、树木遮挡混乱,打造正确视觉层级

本文详细介绍了Godot4 TileMap分层绘制技术,通过图层管理和Y-Sort功能解决2D游戏中角色与物体的遮挡问题。从基础图层设置到高级优化策略,帮助开发者打造符合自然视觉规律的场景层次,提升游戏沉浸感。特别针对TileMap和TileSet的使用提供了实用技巧和代码示例。

weixin_28717411的博客 512

hibernate的关联关系hbm.xml配置模板

1、 hibernate模板规则 一对多(set):<set name=""> <key column=""/> <one-to-many class="" /> </set>多对一:<many-to-one name="" class="" column=""/>多对多(set):<set name="" table=""> <key column=""/> <m

求人不如求己 809

手把手教你搞定国民技术N32G031的Keil开发环境(附Pack包和JLink配置)

本文详细指导如何搭建国民技术N32G031的Keil开发环境,包括Keil MDK安装与激活、Pack包导入、JLink调试器配置等关键步骤。特别针对新手常见问题提供解决方案,帮助开发者快速上手N32G031系列MCU的开发工作。

cuangu9341的博客 424

Hibernate的多对多关联关系(单向和双向)

n-n(多对多)的关联关系必须通过连接表实现。下面以商品种类和商品之间的关系,即一个商品种类下面可以有多种商品,一种商品又可以属于多个商品种类,分别介绍单向的n-n关联关系和双向的n-n关联关系。单向的n-n关联关系  如果仅使用两张数据表,是不能实现n-n的关联关系的,如下图:      商品ITEM_AA属于商品种类CATEGORY_AA,但是如果商品ITEM_AA又同时属于商品种类CATE

Alan_Xiang的博客 4359

STM32CubMX_MQ135检测空气质量

一、MQ135简介 MQ135是测量空气污染情况常用的一个传感器,具有代表性,价格低,寿命长,敏感度也OK,主要用于测量空气中二氧化碳,氮氧化物,氨气,酒精,苯类等。这几样气体可以说都属于家用空气污染测定中的重要成份,因此用这个传感器刚刚好。 MQ135气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在污染气体时,传感器的电导率随空气中污染气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。 注: pm2.5的话要用另外类型

W_Oilpicture的博客 3万+

BEVFusion实战:从零搭建LiDAR-Camera融合的3D目标检测环境(附避坑指南)

本文提供了BEVFusion实战指南,详细讲解如何从零搭建LiDAR-Camera融合的3D目标检测环境。内容涵盖环境配置、数据预处理、模型训练与性能优化等关键步骤,并附有实用的避坑技巧,帮助开发者高效部署这一先进的BEV感知算法。

p4q5r6s7t的博客 514

Hibernate在删除一个游离对象的时候,是不会更新该游离对象的

不会更新该游离对象,但是可以级联删除该游离对象关键的对象。 update t_student set teacherid=null where teacherid=? 17:34:40,079 DEBUG AbstractCollectionPersister:1127 - done deleting collection 17:

zjlolife的专栏 1265

通讯接口应用笔记3:使用W5500实现Modbus TCP服务器

  前面我们设计实现了W5500的驱动程序,也讲解了驱动的使用方式。在最近一次的项目应用中,正好有一个使用W5500实现TCP通讯的需求,所以我们就使用该驱动程序轻松实现。这一篇中我们就来说一说基于我们W5500通讯驱动程序实现TCP通讯的过程。 1、应用需求   在本次应用中,要求实现一个基于W5500的Modbus TCP服务器。这个需求的描述虽然只有一句话,但是这个需求的内容可不简单。我们首先来分析一下这个需求的具体内容。   为了实现基于W5500的Modbus TCP服务器,我们必先须基于W550

木南创智 5499

Hibernate自身双向一对多关联

自身双向一对多关联其实是双向一对多(如CustomerOrder)的特殊情况,以Category为例: (1)Category类的类框图: (2)CATEGORIES表的结构: (3)持久化类Category: package Bean; import java.util.Set;   publicclassCategory {     private Longid

robbinBlog 441

复旦微FMSH_Procise安装全流程详解:从环境配置到实战避坑指南

通过本文的全流程解析+实战技巧,开发者可快速掌握Procise在复旦微芯片开发中的核心应用。未来随着AKConv轻量级架构(参考往期文章)等创新技术的融入,国产芯片开发生态将更加完善。立即关注本专栏,获取最新多镜像切换指南与Linux SDK实战教程!扩展阅读复旦微在线升级BOOT.BIN全解析H7-TOOL实现复旦微脱机烧录(注:本文实验环境为Windows 10 x64 + FMQL45T-CORE开发板,部分操作可能因版本更新调整)立即行动下载本文配套配置文件:[GitHub链接]加入技术交流群。

QQ_778132974的博客 3238

103.在 Vue 3 中使用 OpenLayers 控制图层来显示/隐藏地图

是一个强大的开源库,可以用于构建各种地理信息系统应用。在 Vue 3 中,我们可以结合。方法,可以直接控制某个图层是否可见,而不需要删除或重新创建图层。在开始之前,确保你已经搭建了 Vue 3 项目,并安装了。本文将详细介绍如何在 Vue 3 组合式 API (,并实现按钮控制地图的显示/隐藏功能。会导致 OSM 瓦片地图无法加载。方法控制地图图层的显示与隐藏。安装完成后,即可开始编写代码。在本教程中,我们介绍了如何在。来实现地图的显示/隐藏功能。来实现交互式地图,并通过。在 WebGIS 开发中,

小彭的博客 1560

Hibernate xml一对多关联映射 单向+双向

1.单向 一对多关联映射利用了多对一关联映射原理。 多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一; 一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多。 即两者的映射策略是相同的,只是看待问题的角度不同。 举例:Cl

残缺的孤独 3200

DiffusionDriveV2 (1) : 端到端自动驾驶中受强化学习约束的截断扩散建模

DiffusionDriveV2:强化学习约束的截断扩散模型在端到端自动驾驶中的应用 本文针对端到端自动驾驶中扩散模型面临的模式崩溃问题,提出DiffusionDriveV2框架。该方法通过引入强化学习约束,解决了DiffusionDrive依赖模仿学习导致的多样性与持续高质量之间的困境。主要创新包括: 采用尺度自适应乘法噪声促进广泛探索 提出锚点内GRPO管理单个锚点样本间的优势估计 设计锚点间截断GRPO整合全局视角,避免不同驾驶意图间的不当比较 实验表明,该方法在NAVSIM基准测试中达到最先进水平(

@bangbang的博客 381

精通Hibernate——建立双向一对多关联

当类与类之间建立了关联,就可以方便的从一个对象导航到另一个对象或者一组与他关联的对象。 对象位于内存中,在内存中从一个对象导航到另一个对象显然比到数据库中查询数据速度快多了。类与类之间到底建立双向还是单向都是由业务决定。以Customer和Order为例,如果软件应用有大量这样的需求: 根据客户可以查询该客户所有的订单 根据给定的订单可以查询发出订单的客户 以上需求就需要我们为Custome

路漫漫,水迢迢 783

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【HIbernate框架学习】:Hibernate对象关系映射之双向一对多关联映射

双向一对多对关联映射         我们先来假设一个场景,从班级的角度看,班级和学生的关系就是一对多的关系,也就是一个班级有多个学生, 学生属于某个班级;从学生的角度看,学生和班级的关系就是多对一的关系。也就是多个学生属于一个班级。学生和 班级之间的关系是双向多对一关联关系,也称为双向一对多关联关系。为了解决一对多单向可能存在的问题,我们采 用向一对多,每一方都能维护对方。双向一对多关联

life is wonderful 1067

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Hibernate双向一对多关联

场景:一个老师对应多个学生,多个学生对应一个老师 Teacher类 package com.caokaiyuan.domain; import java.util.HashSet; import java.util.Set; public class Teacher  { private String tid; private String tname; priv

qq208617107的博客 277

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Hibernate 一对多关联映射(双向)

hihernate一对多关联映射(双向ClassesStudent) 一对多双向关联映射: * 在一一端的集合上使用,在对方表中加入一个外键指向一的一端 * 在多一端采用 注意:标签指定的外键字段必须和指定的外键字段一致,否则引用字段的错误 如果在”一“一端维护一对多关联关系,hibernate会发出多余的udpate语句,所以我们一般在多 的一端来维护关联关系 ...

skyuck的专栏 145

hibernate一对多关联映射——双向(非常常用)

原文地址:http://blog.sina.com.cn/s/blog_5fad23090100fct8.html 一对多关联映射通常设为双向的,关系字段设置在一的一端,而且在多的一端维护, 一、解析: 1、  一对多双向关联也就是说,在加载班级时,能够知道这个班级所有的学生。 同时,在加载学生时,也能够知道这个学生所在的班级。 2、我们知道,一对多关联映射和多对一关联映射是一样的,都是

springsen的专栏 5608

hibernate笔记(双向一对多关联映射)

双向一对多关联映射 所谓一对多就是:一个对应多个,如一个班级有多个学生。一个客户有多个订单。。 这种关联关系在hibernate中主要在映射文件中体现: 我们可以试着写个小例子:一个客户customer类,一个订单类 /* * 客户类 */ private Long id;//主键id private String name;//客户名称 private Set o

young_joy blog 987

hibernate双向多对一(一对多)及自身一对多关联

双向多对一(一对多)关联是最最常见的关联关系 javabean如下: /** * * 双向的一对多(多对一) * 少的一端,需要对多的一端进行集合的引用 */ public class Account { private int id; private String accName; //对多端对象集合的引用 private Set setOrders;

lm709409753的专栏 1106

hibernate双向一对多关联映射XML与注解版

双向一对多关联映射原理:   一对多双向关联映射,即在一的一端存在多的一端的一个集合对象,在多的一端存在一的一端的一个对象,这样就可以保证在加载一的一端或多的一端将被指向端的集合或对象加载上来,即保证双向关联。 1、  一对多双向关联也就是说,在加载班级时,能够知道这个班级所有的学生,同时,在加载学生时,也能够知道这个学生所在的班级。 2、我们知道,一对多

fendo 1263

Hibernate 一对多关联映射(双向关联)

一对多双向关联映射的方法:在"一"一端:在集合标签里面使用标签来表明需要在对方的表中添加一个外键指向"一"一端。在"多"一端:使用标签来映射。name值需同实体类中的属性名一致。需要注意:标签所指定的外键字段名需要与标签定义的外键字段名一致,否则便会造成引用数据的丢失!如果从"一"一端来维护一对多双向关联的关系,hibernate会发出多余的update语句,所以一般地情况下,我们便会从多一端来维

liuhebing的专栏 1644

Hibernate框架-05-02-双向一对多关联映射

文章目录双向一对多关系项目结构order.javauser.javaorder.hbm.xmlUser.hbm.xmlTest.java 双向一对多关系 项目结构 order.java package com.hibernate.entity; public class Order { private Integer id; private Double price; private User user; public User getUser() { return

异侠 398

hibernate一对多关联映射(双向关联)

hibernate一对多关联映射(双向关联)ClassesStudent 一对多双向关联映射的方法: * 在“一”一端的集合中使用标签,在对方表中加入一个外键指向“一”一端 * 在“多"的一端采用 注意:标签指定的外键字段必须和指定的外键字段一致,否则引起字段错误 如果在“一”一端维护一对多关联关系,hibernate会发出多余的update语句,所以我们一般在 ...

llying 162
上一篇: hibernate关联映射之一对一单向关联
下一篇: 用encodeURIComponent对特殊字符&,#,$,@,?,+进行编码
马蹄印
博客等级 码龄15年 38粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值