hibenate的一对一,一对多的关联操作实践

ICC2:平行打孔create_pg_stapling_vias power rail(follow pin)不总是metal1一成不变的,当需要使用metal2做power rail,而standard cell的pg pin仍然是metal1时就需要平行打孔,从metal2到metal1。 以往都是用create_pg_vias -allow_parallel_objects来做,但这样有两个弊端,一是需要抓出所有的via12(包括standard cell内部的和出pin绕线产生的),添加routing blockage,防止create pg via的时候产生d 阅读详情

 应用一对一关联实现级联添加数据
 (作业:实现级联删除的功能)
在Record类中建立类型为IdCard的属性和对应的set()/get()方法,其关键代码如下:


    private IdCard idCard;
    public void setIdCard(IdCard idCard) {
        this.idCard = idCard;
    }
  public IdCard getIdCard()
{ return idCard;
}
在Record.hbm.xml文件中映射从Record类到IdCard类的关联,其关键代码如下:
    <one-to-one name="idCard" class="mrgf.IdCard" cascade="all"/>
cascade属性用来设定级联操纵对象的级别,它的可选 值 及使用方法如下表:
可选值   功能
none 默认值,不进行级联操作
save-update 当保存或裂新当前对象时,级联保存或更新关联对象
delete 当删除当前对象时,级联删除关联对象
all 当保存,更新或删除当前对象时,级联保存,更新或删除关联对象

在IdCard类中建立类型为Record的属性和对应的set()/get()方法,其关键代码如下:
   private Record record;
    public void setRecordId(int recordId) {
        this.recordId = recordId;
    }
    public Record getRecord() {
        return record;
    }
}
在IdCard.hbm.xml文件中映射从IdCard类到IdCard类的关联,其关键代码如下:
   <many-to-one name="record" class="mrgf.Record" unique="true" column="record_id"/>
本例采用外键关联,当unique属性值设为true时,表示一对一关联,它的默认值 为false(一对多关联),column属性值为映射表的外键字段名.

Hibernate的add()方法负责对象的持久化,完整代码如下:
package mrgf;

import org.hibernate.cfg.Configuration;
import org.hibernate.SessionFactory;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.Query;
import java.util.List;
import java.io.*;

public class Hibernate {
    public Hibernate() {
    }

    // 在静态快中加载Hibernate配置信息
    private static SessionFactory sessionFactory;
    static {
        try {
            Configuration config = new Configuration().configure();
            sessionFactory = config.buildSessionFactory();
        } catch (Exception e) {
            System.out.println("------在初始化hibernate时抛出异常,内容如下:");
            e.printStackTrace();
        }
    }

    private Session session = null;
    private Transaction tx = null;

    //添加对象
    public void add(Record record, IdCard idCard) {
        // 打开Session,开启事物
        session = sessionFactory.openSession();
        tx = session.beginTransaction();
        // 建立关联,并持久化
        record.setIdCard(idCard);
        idCard.setRecord(record);
        session.save(record);      //在这里只对实例record进行持久化.运行本例,会发现两个实例均被持久化了,这是因为前面将cascade属性值 设

为了all,将其改为none,将不会关联idcard实例.
        // 提交事物,关闭Session
        tx.commit();
        session.close();
    }

    //检索对象
    public List query(String hql) {
        // 打开Session,开启事物
        session = sessionFactory.openSession();
        tx = session.beginTransaction();
        // 检索数据
        Query query = session.createQuery(hql);
        List result = query.list();
        // 提交事物,关闭Session
        tx.commit();
        session.close();
        return result;
    }

    //解决表单提交中文乱码
    public String toChinese(String str) {
        String result = null;
        try {
            result = new String(str.trim().getBytes("ISO8859_1"), "GB2312");
        } catch (UnsupportedEncodingException ex) {
        }
        return result;
    }

}

query.jsp 使用
String name=request.getParameter("name");
..//此处省略了部分获得参数的代码
Record r=new Record();
r.setName(name);
..//此处省略了部分获得参数的代码
IdCard id=new IdCard();
id.setType(type);
id.setNumber(number);

Hibernate h=new Hibernate();
h.add(r,id);//调用自定义的方法
检索
 List result=h.query("from Record where name='"+name+"'");
 <td>证件类型:<%=record.getIdCard().getType() %></td>
        <td>证件号码:<%=record.getIdCard().getNumber() %></td>
这也是级联操作起的作用. 在此只是检索了Record类.


应用一对多关联实现级联操作
Merchandise类
    private MerchSort merchSort;
    public void setMerchSort(MerchSort merchSort) {
        this.merchSort = merchSort;
    }
    public MerchSort getMerchSort() {
        return merchSort;
    }
Merchandise.hbm.xml
  <many-to-one name="merchSort" column="merchSort_id" class="mrgf.MerchSort" cascade="all" lazy="false"/>

MerchSord类
 private Set merchandises=new HashSet();
    public Set getMerchandises() {
        return merchandises;
    }

    public void setMerchandises(Set merchandises) {
        this.merchandises = merchandises;
    }

MerchSort.hbm.xml
 <set name="merchandises" cascade="all" lazy="false" inverse="true">
      <key column="merchSort_id"/>
      <one-to-many class="mrgf.Merchandise"/>
    </set>

success.jsp
 Hibernate hibernate = new Hibernate();
MerchSort merchSort=new MerchSort();
      merchSort.setName(ssort);  //1

 Merchandise merchandiseA=new Merchandise(); //对多,A和B
      merchandiseA.setName(merchA);
Merchandise merchandiseB=new Merchandise();
      merchandiseB.setName(merchB);

hibernate.add(merchSort,merchandiseA,merchandiseB);
级联检索数据
  <%
          String hql="from MerchSort";
          List list=hibernate.query(hql);
          Iterator itSort=list.iterator();
          while(itSort.hasNext()){
            MerchSort sort=(MerchSort)itSort.next();
            Set set=sort.getMerchandises();             //通过关联获得Merchandise类的对象集合
            Iterator itMer=set.iterator();
            while(itMer.hasNext()){
              Merchandise mer=(Merchandise)itMer.next();
          %>
          <tr align="center">
            <td><%=mer.getId() %></td>
            <td><%=mer.getName() %></td><!--获得商品名称-->
            <td><%=mer.getMerchSort().getName() %></td><!--获得商品类别-->
            <td><%=mer.getProducingArea() %></td>
            <td><%=mer.getIntroduce() %></td>
          </tr>
          <%
            }
          }
          %>

Hibernate类的add方法
public void add(MerchSort merchSort, Merchandise merchandiseA, Merchandise merchandiseB) {
        merchSort.getMerchandises().add(merchandiseA);//建立实例之间的关联关系
        merchSort.getMerchandises().add(merchandiseB);
        merchandiseA.setMerchSort(merchSort);
        merchandiseB.setMerchSort(merchSort);
        // 打开Session,开启事物
        session = sessionFactory.openSession();
        tx = session.beginTransaction();
        // 持久化对象
        session.save(merchSort); //只对merchSort实例化,会发现3个均被持久化了.
        // 提交事物,关闭Session
        tx.commit();
        session.close();

    }


 ------------------------------------------------------------------------------

在数据库中建立了表之间的关系图.
hibernate建实体Bean的时候可自动生成1对多的关系

cascade="all" 级联等级
lazy 延迟,是指检索当前对象时,是否同时检索与当前对象关系的对象。

多对1
<many-to-one name="bbssection" class="my.bean.Bbssection" cascade="all" lazy="false">
            <column name="RSID" not-null="true" />
        </many-to-one>
1对多
private Set bbstopics = new HashSet(0);
public Set getBbstopics() {
  return this.bbstopics;
 }

 public void setBbstopics(Set bbstopics) {
  this.bbstopics = bbstopics;
 }

   <set name="bbstopics" inverse="true" cascade="all" lazy="false">
            <key>
                <column name="TUID" not-null="true" />
            </key>
            <one-to-many class="my.bean.Bbstopic" />
        </set>
设置

少的.get多的().add(多的其中一个);
少的.get多的().add(多的其中另一个);

-------------------------------------------------------------------------------

1对多的添加
 // 添加对象
    public void add(MerchSort merchSort, Merchandise

merchandiseA, Merchandise merchandiseB) {
        merchSort.getMerchandises().add(merchandiseA);
        merchSort.getMerchandises().add(merchandiseB);

//HashSet的add方法。来添加多个对象
        merchandiseA.setMerchSort(merchSort);
        merchandiseB.setMerchSort(merchSort);
        // 打开Session,开启事物
        session = sessionFactory.openSession();
        tx = session.beginTransaction();
        // 持久化对象
        session.save(merchSort);
        // 提交事物,关闭Session
        tx.commit();
        session.close();

    }

 

开源模型应用落地-qwen模型小试-Qwen3-8B-快速体验(一) 阿里云推出国内首个集成“快思考”与“慢思考”能力的 Qwen3-8B 大语言模型,以80亿参数和 128K 上下文支持,重塑AI应用边界并助力开发者高效部署 阅读详情

相关推荐

Matlab实战:从零搭建弹道导弹六自由度仿真模型(附完整代码)

本文详细介绍了如何使用Matlab从零搭建弹道导弹六自由度仿真模型,涵盖仿真环境配置、核心运动方程实现、气动力建模及仿真结果分析。通过完整代码示例,帮助读者掌握弹道导弹六自由度仿真的关键技术,适用于航空航天工程和复杂系统建模领域。

x8y9z0的博客 945

Hibernate基于外键一对一映射操作实例

实例背景:公民和公民的身份证,是一个一对一的例子,一个公民只有一个身份证。以这个背景开展说明!

机智猫 1万+

【IPAM】Netbox docker模式版本升级

NETBOX 是一个开源的网络资源管理系统,主要用于管理 IP 地址、机架、设备、接口等网络资源信息。下面是 NETBOX 的功能、优点和缺点的详细介绍。

u012153104的博客 1329

Hibernate笔记——关联关系配置(一对多、一对一和多对多)

原文:http://www.cnblogs.com/otomedaybreak/archive/2012/01/20/2327695.html ============================================== 第一种关联关系:一对多(多对一) ...

chuanke1344的博客 198

SpringSecurity(15)——OAuth2密码模式

SpringSecurity Oauth2密码模式

peng_gx的博客 1520

英飞凌 AURIX 系列单片机的HSM详解(1)——何为HSM

1. 概述 随着汽车上通信系统越来越复杂,云端远程通信的场景越来越多,信息安全变得越来越重要,在通信领域常用的AES、SHA、RSA等加密算法被越来越多地应用到汽车上。但通常这类加解密算法都需要大量的数学运算,需要消耗很多CPU时间和资源,汽车上的ECU又有比较高的实时性要求,为了节省主CPU的资源,HSM应运而生。 HSM(Hardware Security Module),是MCU上专门用于实现加解密算法的一个外设,它一般会有一个独立的CPU,专门用来进行加解密运算,还有一些针对特定算法的硬件加速器(如

weixin_42967006的博客 4万+

hibernate多表操作之一对多的双向关联

实例:Classes与Student    一对多,相比一对多的单项关联,这回,能在Student里面也能找到学生     持久化类:Classes 班级,一个班级有多个学生,通过集合来建立关系  private Long cid; //标示符属性  private String name;  //一般属性  private String description;

l7945685的博客 2279

保姆级教程:ABAP 通过 HTTP POST 调用 OData 服务创建业务数据的具体例子

笔者之前的文章发布之后,有朋友在评论区留言,询问 ABAP 除了 Web Service 之外,是否也支持 HTTP 呢?ABAP 这么强大的语言,支持 HTTP 当然不在话下。网上有很多在 ABAP 系统基于 CL_HTTP_CLIENT 工具类,通过 HTTP 协议和第三方系统交互的代码例子。本文介绍笔者项目中一个实际例子,实现的是在 ABAP 系统 A 通过 HTTP 调用 OData 服务,在 ABAP 系统 B 创建业务数据的需求。下面我们按照这个套路来一步步实现。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 697

hibernate5(12)注解映射[4]一对一外键关联

在实际博客网站中,文章内容的数据量非常多,它会影响我们检索文章其它数据的时间,如查询发布时间、标题、类别的等。这个时候,我们可以尝试将文章内容存在另一张表中,然后建立起文章——文章内容的一对一映射一对一关联有两种方式,一种是外键关联,另一种是复合主键关联。外键关联下面我们先看一个一对一单向关联的实例/*************关联关系维护方************/

总结沉淀 7177

【数据集】未来不同情景下预测数据:如人口、土地利用等

未来不同情景下预测数据:如人口、土地利用等

WW、forever的博客 2994

[内网基础] 内网基础知识 —— Windows 工作组

在一个大型单位里,可能有成百上千台计算机互相连接组成局域网,如果不对这些计算机进行分组,网络的混乱程度是可想而知的。Windows 为了解决这一问题,就产生了工作组(Work Group)这个概念。Windows 工作组尝试将不通的计算机按功能(或部门)分别列入不同的工作组,例如技术部的计算机都列入 “技术部” 工作组、行政部的计算机都列入 “行政部” 工作组。要想访问某个部门的资源,只要在 “网络” 里双击该部门的工作组名,就可以看到该部门里的所有计算机了。

Blue17 の 小窝 1600

六、Hibenate一对一主键关联(单向关联)

一、Hibenate一对一主键关联(单向关联)(1)实体类与表间的关系Pepole           IDcard                  tab_people     tab_idcard-id:int          id:int                  id             id-name:string     -idcard_code:string     name           IDcard_code-sex:String                   

jack18688的专栏 413

32、高光谱遥感技术在军事领域的应用解析

高光谱遥感技术凭借其高分辨率和精细光谱分析能力,在军事领域广泛应用于战场详细侦察、伪装目标识别及目标实际温度与发射率的检测,显著提升了目标识别精度和作战支持能力。同时,该技术在内陆水体成分反演、海洋环境监测和农业管理等领域也展现出巨大潜力。尽管面临数据量大、处理复杂、技术融合不足和仪器性能限制等挑战,未来通过人工智能融合、高效算法研发和先进仪器开发,高光谱遥感技术将在多领域实现更深入应用与发展。

blue的专栏 229

Hibenate 一对一双向关联关系

@Entity @Table(name = "Card") public class Card { @Id @GeneratedValue private Integer cid; @Column private String cum; @OneToOne(mappedBy = "card") private People people;

qq_36024638的博客 272

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

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

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

hibenate一对多

比如客户和联系人 客户方属于一方,配置set属性: package com.zking.crm.domain; import java.util.HashSet; import java.util.Set; /** * 客户基本信息 * * */ public class CstCustomer implements java.io.Serializable { private L...

a604435713的博客 213

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Hibernate一对多单向,多对一单向,多对一双向关联

Person和Dream类 一对多单向关联 person中的 @OneToMany public Set getSetDream() { return setDream; } public void setSetDream(Set setDream) { this.setDream = setDream; } 生成的表 需要添加一个JoinColumn pe

hurahura的博客 631

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Hibernate的一对多映射的单向关联和双向关联(九)

非常对不起,老蝴蝶由于生活和工作上的事情太忙,无法及时更新,造成了将近三个月的停更。以后,会更加努力的。为了IT,加油。 上一章简单介绍了Hibernate的一对一映射(八),如果没有看过,[请观看上一章](https://blog.youkuaiyun.com/yjltx1234csdn/article/details/83241189) ...

两个蝴蝶飞 1401

Hibenate的单向关联映射(注解版)

一:单向1-1关联 以老夫老妻为例子来说明一下,在中国以前是以丈夫主导地位,所以我这里以t_husband作为主表,t_wife作为从表 1.1:无连接表的 (1)首先创建实体类,然后使用注解表示出来两者的关联关系 import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence....

qq_38777614的博客 297

Hibernate中的一对多和多对多关系

Hibernate是一个优秀的ORM框架,它简化了Java应用程序与关系型数据库之间的数据访问。在Hibernate中,我们可以使用一对多和多对多的关系来处理复杂的数据模型。本文将介绍Hibernate中的一对多和多对多,包括配置和操作。

互联说 1121

Hibenate中多表关联

student.hbm.xml        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">                           

河北软件职业技术学院 李丹(数据库老师) 486

hibernate 双向一对多 关联在多端维护

<br />作者:xyzroundo<br /> <br />如果在”一“一端维护一对多关联关系,hibernate会发出多余的udpate语句,所以我们一般在多 <br />的一端来维护关联关系 

xyzroundo的专栏 951

Java程序员从笨鸟到菜鸟之(五十四)细谈Hibernate(五)Hibernate一对多关系映射

前几篇系列博客:                            细谈Hibernate(一)hibernate基本概念和体系结构                        细谈Hibernate(二)开发第一个hibernate基本详解                        细谈Hibernate(三)Hibernate常用API详解及源码分析

曹胜欢 2万+

七、七Hibenate一对一主键关联(双向关联)

一、Hibenate一对一主键关联(双向关联)(1)实体类与表间的关系Pepole           IDcard                  tab_people     tab_idcard-id:int          id:int                  id             id-name:string     -idcard_code:string     name           IDcard_code-sex:String      pepole:Pepole

jack18688的专栏 469

关于hibernate中一对一和一对多的之中的误区整理

关于hibernate中一对一和一对多的之中的误区整理

loveuserzzz的专栏 1861

Hibenate 课堂笔记

这是我学Hibernate的课堂笔记,整理出来供大家学习,其中不正确的地方,还请指正!共同学习!

Lincoln的专栏 1010

Hibernate关联关系之一对一(外键关联)

测试用户类和地址类的一对一关联关系: User类: package com.xxc.domain; public class User { private Integer id; private String name; private Address addr; public Integer getId() { return id; } public void

833
上一篇: hibernate实践 附QBC检索方式常用的设定查询条件的方法
下一篇: struts设计模式之DispathAction类实现多个操作
facepp
博客等级 码龄22年 342粉丝 638原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值