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

简介:

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

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


                                       (Person表)

id name
1 张三
2 李四

                                      (Group表

id name p_id
1
财务组 1
2 财务组 2


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

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

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

                                         (Group表)

id name
1 财务组
2 开发组

                                        (Person表

id name g_id
1
张三 1
2 李四 1


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


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

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
@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;
     }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@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配置方法


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
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;
     }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
     }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<? 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 >
1
2
3
4
5
6
7
8
9
10
11
12
<? 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测试一下


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
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!











本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1568855,如需转载请自行联系原作者
目录
相关文章
|
10月前
|
SQL XML 存储
Hibernate框架【五】——基本映射——多对多映射
Hibernate框架【五】——基本映射——多对多映射
130 0
|
5月前
|
Java 数据库连接 数据库
Hibernate5中实体映射命名策略
Hibernate5中实体映射命名策略
52 0
|
5月前
|
SQL 存储 Java
Hibernate - 继承关联关系映射
Hibernate - 继承关联关系映射
34 0
|
5月前
|
SQL XML Java
Hibernate - 单向多对一关联关系映射
Hibernate - 单向多对一关联关系映射
16 0
|
10月前
|
SQL XML Java
Hibernate框架【四】——基本映射——多对一和一对多映射
Hibernate框架【四】——基本映射——多对一和一对多映射
106 0
|
Java 数据库连接
mybatis-plus和hibernate 忽略映射字段
mybatis-plus和hibernate 忽略映射字段
250 1
|
SQL Java 数据库连接
《Hibernate上课笔记》-----class3----Hibernate的单实体映射
《Hibernate上课笔记》-----class3----Hibernate的单实体映射
95 0
|
XML Java 数据库连接
《Hibernate上课笔记》----class4----Hibernate继承关系映射实现详解
《Hibernate上课笔记》----class4----Hibernate继承关系映射实现详解
68 0
《Hibernate上课笔记》----class4----Hibernate继承关系映射实现详解
|
存储 SQL Java
hibernate学习笔记之二(映射关系与懒加载)
hibernate学习笔记之二(映射关系与懒加载)
hibernate学习笔记之二(映射关系与懒加载)
|
SQL 存储 数据可视化
Java Web之Hibernate的高级应用(数据库实体关联之间的映射规则、实体继承关系映射、Hibernate查询语言)
Java Web之Hibernate的高级应用(数据库实体关联之间的映射规则、实体继承关系映射、Hibernate查询语言)
154 0
Java Web之Hibernate的高级应用(数据库实体关联之间的映射规则、实体继承关系映射、Hibernate查询语言)