hibernate之关于多对一单向关联映射



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



 在项目的开发中多对一的单向关联映射是最常见的,关联映射!这个着重详细讲解一下!

例如,我们现在一个组(Group)和人(Person)


                                       (Person表)

idname
1张三
2李四

                                      (Group表

idnamep_id
1
财务组1
2财务组2


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

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

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

                                         (Group表)

idname
1财务组
2开发组

                                        (Person表

idnameg_id
1
张三1
2李四1


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


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!



本文出自 “诺言永远依恋小柴、、、” 博客,请务必保留此出处http://1936625305.blog.51cto.com/6410597/1568855

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。