当前位置: 首页 > article >正文

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

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.kler.cn/a/6447.html

相关文章:

  • Python从0到100(七十八):神经网络--从0开始搭建全连接网络和CNN网络
  • iterm2 focus时灰色蒙层出现的解决办法
  • Android Studio IDE环境配置
  • 新能源汽车锂离子电池各参数的时间序列关系
  • React简单了解
  • Android -- 双屏异显之方法二
  • 设计模式之责任链模式
  • 【Ruby学习笔记】15.Ruby 异常
  • 如何切换node版本
  • 【从零开始学习 UVM】9.3、UVM Config DB —— uvm_config_db 示例【文章最后的表格对于理解路径索引很重要】
  • 贪心算法(四)
  • 计算机网络考试复习——第一章 1.5 1.6
  • 【Java代码审计】表达式注入
  • SQL之存储函数
  • WebRTC Probe 探测码率、transport-cc作用
  • BGP 十一条选路原则与BGP路由传递的注意事项介绍
  • 玩转git的第6章节:git的smart checkout与force checkout
  • ping协议(ICMP)的原理
  • 家电行业采购-分销-电商-仓储业务用契约锁电子签,提效95%
  • 力扣(134.860.406.452)补9.26
  • Spring框架AOP增强,动态代理
  • Cursor——ChatGPT的替代品【笔记】
  • linux GlusterFS文件系统 | GFS分布式文件系统群集部署 | 超详细
  • 心理咨询师证书有用吗 有必要考吗
  • Python高阶函数(Higher-order Function)
  • GFS分布式文件系统