Hibernate多表关联——(一对多关系)

news2025/2/26 3:59:17

Hibernate多表关联——(一对多关系)

文章目录

  • Hibernate多表关联——(一对多关系)
    • 1.分别在类中添加属性:
    • 2.hibernate建表
    • 3.使用测试类在表中添加数据

hibernate是连接数据库使得更容易操作数据库数据的一个框架,在上期我们演示了单表建立查询。接触过数据库的都知道数据库表有三种关系, 一对一,一对多,多对多。而接下来我们在hibernate中建立 一对多关系,首先应该检查一下数据库是否打开,根据 上一篇文章,接下来继续建立表的关系。这里创建两个类Custom和company,这两个表的关系就是: 一个公司有多名员工,一个员工只能属于一家公司,这里的多代表的就是员工,公司就是一。

1.分别在类中添加属性:

//员工类
private int lid;//员工id
private String name;//员工姓名
private String tel;//员工电话
private String gender;//员工性别
private Company company;//存入公司信息

//添加相应的get和set方法即可

同样的在company类中添加属性

private int cid;//公司id
private String name;//公司名称
private String address;//公司地址
//注意这里要创建一个集合用来保存和员工表之间的关系
Set<Custom> companySet = new HashSet<>();
//添加相应的get和set方法即可

2.hibernate建表

之后建立两个文件夹分别存放两个类的表结构,可以直接参照单表结构进行建立。

<!--Custom表结构-->
<hibernate-mapping>
    <class name="com.hbnu.pojo.Custom" table="tb_Custom">
        <id name="lid">
            <generator class="native"></generator>
        </id>
        <property name="name"/>
        <property name="tel" />
        <property name="gender"/>
        <!--外键配置,此处非常关键 -->
        <many-to-one name="company" class="com.hbnu.pojo.Company" column="clid"/>
    </class>
</hibernate-mapping>


建立多表之间的联系时需要在建表时添加表的外键关系,这样才算表与表之间产生了联系。

而使用hibernate建立表时要注意,关系是建立在一对多,的一个关系属性的表中,也就是这里的公司。

<!--Company表结构-->
<hibernate-mapping>
    <class name="com.hbnu.pojo.Company" table="tb_company">
        <id name="cid">
            <generator class="native"></generator>
        </id>

        <property name="name" />
        <property name="address" column="addr"></property>
        <!--需要双方去维护的外键
        column:外键名称
        -->
        <!--使用级联保存,在one中添加,在操作one的一方-->
        <set name="companySet">
            <key column="clid"></key>
            <one-to-many class="com.hbnu.pojo.Company"/>
        </set>
    </class>

</hibernate-mapping>

创建完表,只需要随意使用一个测试类就可以看见表已经创建成功了

3.使用测试类在表中添加数据

综合以上,两个表之间的关系已经搭建完成,接下来我们在表中添加数据。

@Test
//测试代码
    public void testOneToManySave(){
        SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();

        Customs customs1 = new Customs();
        customs1.setName("百度");
        customs1.setAddress("北京");

        Customs customs2 = new Customs();
        customs2.setName("腾讯");
        customs2.setAddress("深圳");

        company company1 = new company();
        company1.setName("小李");
        company1.setTel("18569655111");
        company1.setGender("男");

        company company2 = new company();
        company2.setName("小顺");
        company2.setTel("18569655222");
        company2.setGender("男");

        company company3 = new company();
        company3.setName("小王");
        company3.setTel("18569655333");
        company3.setGender("男");

        company company4 = new company();
        company4.setName("小汤");
        company4.setTel("18569655444");
        company4.setGender("女");

        company company5 = new company();
        company5.setName("小明");
        company5.setTel("18569655666");
        company5.setGender("男");

        //建立关系
        customs1.getcompanySet().add(company1);
        customs1.getcompanySet().add(company2);
        customs1.getcompanySet().add(company3);

        company1.setCustoms(customs1);
        company2.setCustoms(customs1);
        company3.setCustoms(customs1);
        company4.setCustoms(customs2);
        company5.setCustoms(customs2);


        //保存数据
        session.save(1);
        session.save(customs2);
        
        session.save(company1);
        session.save(company2);
        session.save(company3);
        session.save(company4);
        session.save(company5);
        
        HibernateUtil.close(session,sessionFactory);

    }

在数据库中查看数据已经添加。

注意我这里表名有些出入,请遵守自己的代码即可。

在这里插入图片描述

这样添加数据有点繁琐,这里介绍一个标签cascade="save-update"添加该标签在外键关系中可以更加高效的添加数据,如图

在这里插入图片描述

该标签页添加在customs中。

如果再需要添加数据时就不需要将custom中数据进行Sava(保存),保存company数据即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ERROR:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing错误

一、问题 重新安装hbase后&#xff0c;在hbase shell中查看所有命名空间时&#xff0c;出现了ERROR:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing错误。 二、方法 1、root用户下&#xff0c;关闭hbase stop-hbase.sh 2、执行以下命令删除HDFS下的hb…

go进阶篇gin框架系列三

一、模板引擎的语法 {{.}} 模板语法都包含在{{和}}中间&#xff0c;其中{{.}}中的点表示当前对象。 当我们传入一个结构体对象时&#xff0c;我们可以根据.来访问结构体的对应字段。 pipeline pipeline是指产生数据的操作。比如{{.}}、{{.Name}}等。Go的模板语法中支持使用管道…

JavaWeb开发 —— Element组件

目录 一、什么是Element&#xff1f; 二、快速入门 三、常见组件 一、什么是Element&#xff1f; ① Element&#xff1a;是饿了么团队研发的&#xff0c;一套为开发者、设计时和产品经理准备的基于Vue 2.0 的桌面端组件库。 ② 组件&#xff1a;组成网页的部件&#xff0…

FIFO的工作原理及其设计

1.简介 FIFO( First Input First Output)简单说就是指先进先出。FIFO存储器是一个先入先出的双口缓冲器&#xff0c;即第一个进入其内的数据第一个被移出&#xff0c;其中一个口是存储器的输入口&#xff0c;另一个口是存储器的输出口。 对于单片FIFO来说&#xff0c;主要有两种…

文字转语音软件的优缺点及如何选择最适合的工具

随着科技的进步&#xff0c;文字转语音技术已经越来越成熟&#xff0c;越来越多的人开始使用文字转语音软件来转换文本为语音。这种技术可以帮助人们在许多方面&#xff0c;例如改善阅读体验、方便学习、提高生产效率等。然而&#xff0c;文字转语音软件有其优缺点&#xff0c;…

一文读懂推荐系统用户画像

1.推荐系统用户画像 用户画像这个词具有广泛性。 它被应用于推荐&#xff0c;广告&#xff0c;搜索&#xff0c;个性化营销等各个领域。任何时候&#xff0c;不管出于什么目的&#xff0c;我们想描述我们的用户是谁的时候&#xff0c;大家都会用到用户画像这个词。 比如&…

VUE_学习笔记

一、 xx 二、模板语法 1.模板语法之差值语法 &#xff1a;{{ }} 主要研究&#xff1a;{{ 这里可以写什么}} 在data中声明的变量、函数等都可以。常量只要是合法的javascript表达式&#xff0c;都可以。模板表达式都被放在沙盒中&#xff0c;只能访问全局变量的一个白名单&a…

精准关键词获取-行业搜索词分析

SEO关键词的收集通常可以通过以下几种方法&#xff1a; 根据市场价值、搜索词竞争性和企业实际产品特征进行筛选&#xff1a;确定您的关键词列表之前&#xff0c;建议先进行市场分析&#xff0c;了解您的竞争对手、行业状况和目标受众等信息&#xff0c;以更好的了解所需的特定…

MySQL日志

MySQL日志 错误日志 错误日志是MySQL中最重要的日志之一&#xff0c;它记录了当mysqld启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 使用如下命令&#xff0c;可…

ChatGPT宝藏插件丨装上之后,上网、语音聊天、一键分享对话……简直让你爽到起飞!

今天分享4个让你的 ChatGPT 功能更强大的浏览器插件&#xff0c;装上就能用&#xff0c;每一个都是精挑细选。 1. WebChatGPT 很多小伙伴在用 ChatGPT查阅信息时&#xff0c;发现它有一个致命的问题&#xff1a; ChatGPT的知识库全部截止到 2021年9月&#xff0c;正常情况下…

航拍构图方法

目录 简介 对比构图 重复对比 明暗对比 颜色对比 空间错位 点构图 中心点构图 九宫格构图 线构图 二分线&#xff08;水平、对称&#xff09;构图 三分线构图 平行线构图 对角线构图 引导线构图 面构图 前景构图 简化构图 总结 简介 最近接触了无人机&#xf…

MySQL数据库备份(导出导入)的命令详解mysqldump

![在这里插入图片描述](https://img-blog.csdnimg.cn/174ee9e5170445b7acab94c5d97684ea.png [options] 参数参数说明-A, --all-databases导出所有数据库-B, --databases导出指定数据库-h, --hostname指定ip&#xff0c;默认本机-P, --port#指定端口&#xff0c;默认3306-u, …

【Java面试八股文宝典之MySQL篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day21

大家好&#xff0c;我是陶然同学&#xff0c;软件工程大三即将实习。认识我的朋友们知道&#xff0c;我是科班出身&#xff0c;学的还行&#xff0c;但是对面试掌握不够&#xff0c;所以我将用这100多天更新Java面试题&#x1f643;&#x1f643;。 不敢苟同&#xff0c;相信大…

JavaEE——文件操作与IO操作

目录 文件路径 文件类型 File类 文件的创建 文件流 File类文件读写操作 通过PrintWriter写或Scanner读 PrintWriter写 Scanner读 文件路径 计算机中的文件是以树形结构进行存储的。要找一个文件&#xff0c;需要通过根目录一层一层找&#xff0c;直到找到&#xff0c;…

不敲代码用ChatGPT开发一个App

先说下背景&#xff0c;有一天我在想 ChatGPT 对于成熟的开发者来说已经是一个非常靠谱的助手了&#xff0c;身边也确实有很多同事把它作为一个离不开的助理担当。 但是如果我只是略微懂一点前端知识的新人&#xff0c;了解 HTML、CSS、JS 相关的知识&#xff0c;想开发一个安…

华为进军ERP,北用友南金蝶格局或将生变?用户:No!我们选择它

目录 华为搅局ERP市场 用友金蝶如何应对 我们另有选择 那么这款软件是什么&#xff1f; 小结 华为搅局ERP市场 任正非表示4月份将上线MetaERP&#xff01;受此消息影响&#xff0c;ERP市场的两大巨头用友、金蝶股价纷纷跳水。 在机构的定价逻辑里&#xff0c;用友网络、金…

主机发现和端口扫描基本原理和工具选择

发现主机 扫描端口指令sudo nmap -sn ip 实则是封装ping指令 可以找目标靶机 sudo nmap --min-rate 10000 -p- 192.168.10.191 -p端口号 -p-从一开始扫 设置最小速度扫描 -p-指定靶机 10000是较好的速度 在工作中最好扫两遍 UDP扫描 sudo nmap -sU --min-rate 10000 …

10 kafka生产者发送消息的原理

1.发送原理&#xff1a; 在消息发送的过程中&#xff0c;涉及到了两个线程——main 线程和 Sender 线程。在 main 线程 中创建了一个双端队列 RecordAccumulator。main 线程将消息发送给 RecordAccumulator&#xff0c; Sender 线程不断从 RecordAccumulator 中拉取消息发送到…

大数据自我进阶(数据仓库)-暂未完全完成

什么时候需要数据仓库&#xff1f; 1.当决策者要进行战略分析或者展示统计的需求。 2.并且数据量非常庞大&#xff0c;而且各个都是数据孤岛。 当满足这2个条件后&#xff0c;就需要搭建数据仓库。 数据仓库的第一步&#xff08;数据清洗&#xff09; 为了能准确的分析&am…

python编辑工具PyCharm下载安装步骤

开发python程序的途径还是不少的 用解释器一行行执行代码 或者 通过解释器程序执行一个python代码文件 但这两种方式 其实都只是测试场景下的使用 就好像古代打仗&#xff0c;光有英雄好汉没用&#xff0c;他还有有一件趁手的兵器&#xff0c;大部分python程序都是在PyCharm上开…