• hibernate在地图的方法之一协会



    【Hibernate】之关于多对一单向关联映射


    在项目的开发中多对一的单向关联映射是最常见的关联映射!

    这个着重具体解说一下!

    比如,我们如今一个组(Group)和人(Person)

    id name
    1 张三
    2 李四
    (person表)

    id name p_id
    1 財务组 1
    2 財务组 2

    (Group表)                                  

    由上表我们发现,是不是出现数据的反复?財务组在反复!

    所以。在多对一的单向映射中,我们一般是在多的一方加上外键来关联少的一方。

    那么在这个关系中(Group)是少的一方。(Person)是多的一方。一个组里面能够有多个人!

    id name
    1 財务组
    2 开发组

    (person表)

    id name G_id
    1 张三 1
    2 李四 1

    (Group表)  

    上面这样的关系才是正常的业务逻辑!

    ok,以下来看我们的Annotations配置!

    @Entity
    @Table(name="t_user")
    publicclass Person {
        private Integer id;  
        private String name;
        private Integer age;
        private Group group;
         
        @ManyToOne
        public Group getGroup() {
           returngroup;
        }
        publicvoid setGroup(Groupgroup) {
           this.group = group;
        }
        @Id
        @GeneratedValue
        public Integer getId() {
           returnid;
        }
        publicvoid setId(Integerid) {
           this.id = id;
        }
        @Column(name="name")
        public String getName() {
           returnname;
        }
        publicvoid setName(Stringname) {
           this.name = name;
        }
        @Column(name="age")
        public Integer getAge() {
            returnage;
        }
        publicvoid setAge(Integerage) {
           this.age = age;
        }
    }

    @Entity
    @Table(name="t_group")
    publicclass Group {
        private Integer id;
        private String name;
         
        @Id
        @GeneratedValue
        public Integer getId() {
           returnid;
        }
        publicvoid setId(Integerid) {
           this.id = id;
        }
        @Column(name="name")
        public String getName() {
           returnname;
        }
        publicvoid setName(Stringname) {
           this.name = name;
        }
    }

    XML配置方法

    package csg.hibernate.entity;
      
    publicclass Person {
        private Integer id;
        private String name;
        private Integer age;
        private Group group;
         
        public Group getGroup() {
           returngroup;
        }
        publicvoid setGroup(Groupgroup) {
           this.group = group;
        }
        public Integer getId() {
           returnid;
        }
        publicvoid setId(Integerid) {
           this.id = id;
        }
        public String getName() {
           returnname;
        }
        publicvoid setName(Stringname) {
           this.name = name;
        }
        public Integer getAge() {
           returnage;
        }
        publicvoid setAge(Integerage) {
           this.age = age;
        }
    }

    package csg.hibernate.entity;
      
    publicclass Group {
        private Integer id;
        private String name;
         
        public Integer getId() {
           returnid;
        }
        publicvoid setId(Integerid) {
           this.id = id;
        }
        public String getName() {
           returnname;
        }
        publicvoid setName(Stringname) {
           this.name = name;
        }
    }

    <?xml version="1.0"?

    > <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="csg.hibernate.entity"> <class name="Person" table="t_user"> <id name="id"> <generator class="native" /> </id> <property name="name" /> <property name="age"/> <many-to-one name="Group" column="group_id"/> </class> </hibernate-mapping>


    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="csg.hibernate.entity">
        <class name="Group" table="t_group">
           <id name="id">
               <generator class="native"/>
           </id>
           <property name="name" />
        </class>
    </hibernate-mapping>

    到这里我们使用Junit測试一下!


    publicclass JuniTest {
    privatestatic SessionFactory sessionFactory;
         
        @BeforeClass
        publicstaticvoid beforeClass() {
           Configuration cfg=new Configuration();
           cfg.configure();
           sessionFactory=cfg.buildSessionFactory();
        }
        
        @Test
        public  void add(){
           try {
               Group group=new Group();
               Session session = sessionFactory.getCurrentSession();
               session.beginTransaction();
               group.setName("部门");
               session.save(group);
               Person person=new Person();
               person.setAge(12);
               person.setName("张三");
               person.setGroup(group);
               session.save(person);
               session.getTransaction().commit();
           } catch (HibernateException e){
               e.printStackTrace();
           }
            
        }
         
        @AfterClass
        publicstaticvoid afterClass() {
           sessionFactory.close();
        }
    }

    ok!


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    使用函数式语言实践DDD
    理解函数式编程中的函数组合--Monoids(二)
    理解函数式编程语言中的组合--前言(一)
    信息熵 交叉熵
    激光雷达感知方案
    卡尔曼滤波算法
    我平时用的 golang 项目结构
    记一个 aliyun tablestore go client 的大坑
    关于 signal.Notify 的一个小问题
    【Linux】【Jenkins】Linux环境搭建和遇到的问题和解决方案等
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4743145.html
Copyright © 2020-2023  润新知