ads2569268136 2018-12-13 11:15 采纳率: 100%
浏览 437
已结题

Mybtais关系映射问题 多对一 一对多

图片说明哪位大神给解释一下这道题呗,正常不是一对多才会用 标签的吗

  • 写回答

1条回答 默认 最新

  • 秦风萧萧 2018-12-13 11:23
    关注

    关联映射之一对多、多对一映射

    一、需求:
    部门与员工
    一个部门有多个员工 【一对多】
    多个员工,属于一个部门 【多对一】

    二、逻辑分析:

    三、代码实现
    1、javabean及映射文件的配置:
    1)Employee.java、Employee.hbm.xml

    2)Dept.java、Dept.hbm.xml

    完整的Dept.hbm.xml配置:

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">






    <!--
    一对多关联映射的配置(通过部门管理员工)
    Dept 映射关键点:
    1. 指定 映射的集合属性: "emps"
    2. 集合属性对应的集合表: "t_employee"
    3. 集合表的外键字段 "t_employee. dept_id"
    4. 集合元素的类型

            table="t_employee"可以省略,
            因为有对应的<one-to-many class="Employee"/>,
            并且可以找到Employee.hbm.xml
            如果写上,那么talbe的值"t_employee"一定要与
            Employee.hbm.xml(<class name="Employee" table="t_employee">)中的表名一致
         -->
        <set name="emps" table="t_employee">
            <!-- 
                colunmn的值(dept_id),一定要与Employee.hbm.xml中的
                <many-to-one name="dept" column="dept_id" class="Dept"></many-to-one>
                的colunm值一致
             -->
            <key column="dept_id"></key>
            <!-- 
                class指定集合元素类型,sram.oneTomany.Employee,
                但是因为<hibernate-mapping package="sram.oneTomany" auto-import="true">
                这里已经指定包名,所以只写Employee就OK
            -->
            <one-to-many class="Employee"/>
        </set>
    


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    2、测试类App1_save.java——实现保存的功能

    package sram.oneToMany;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;

    public class App1_save {
    public static SessionFactory sf;
    static{
    sf = new Configuration()
    .configure()
    .addClass(Dept.class)
    .addClass(Employee.class)//测试使用
    .buildSessionFactory();
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    1)部门方(一的一方操作)

    2)【推荐】员工方(多的一方操作)

    3、数据库结果:
    1)员工表:

    2)部门表:

    4、测试类App2_get.java——实现保存的功能

    package sram.oneToMany;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;

    public class App1_save {
    public static SessionFactory sf;
    static{
    sf = new Configuration()
    .configure()
    .addClass(Dept.class)
    .addClass(Employee.class)//测试使用
    .buildSessionFactory();
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    1)通过部门方获取另一方:

    2)通过员工方获取另一方:

    四、总结:
    1、在一对多与多对一的关联关系中,保存数据最好通过多的一方来维护关系,这样可以减少update语句的生成,从而提高hibernate的执行效率!

    2、概念:
    配置一对多与多对一,这种叫“双向关联”
    只配置一对多,叫“单向一对多”

    只配置多对一,叫“单向多对一”

    作者:Cool_Tomato
    来源:CSDN
    原文:https://blog.csdn.net/qq_34944851/article/details/53737332
    版权声明:本文为博主原创文章,转载请附上博文链接!

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月13日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器