hibernate之关于使用连接表实现多对一关联映射

简介:

在我们项目使用中采用中间表最多的一般就是多对一,或者是多对多,当然一对一使用中间表也是可以的,但是这种几率通常少之又少!所以这里重点介绍多对一和一对多的采用中间表进行关联映射!


依然采用Group和Person来描述这个逻辑!


Annotations配置


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Entity
@Table (name= "t_group" )
publicclass Group {
     private  Integer id;
     private  String name;
     @Id
     @GeneratedValue
     public  Integer getId() {
        returnid;
     }
     publicvoid setId(Integer id) {
        this .id = id;
     }
     @Column (name= "g_name" )
     public  String getName() {
        returnname;
     }
     publicvoid setName(String name) {
        this .name = name;
     }
}
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
@Entity
@Table (name= "p_person" )
publicclass Person {
     private  Integer id;
     private  String name;
     private  Integer age;
     private  Group group;
     @ManyToOne
     @JoinTable (name= "g_p" ,joinColumns={ @JoinColumn (name= "p_id" )},
            inverseJoinColumns={ @JoinColumn (name= "g_id" )})
     public  Group getGroup() {
        returngroup;
     }
     publicvoid setGroup(Group group) {
        this .group = group;
     }
     @Id
     @GeneratedValue
     public  Integer getId() {
        returnid;
     }
     publicvoid setId(Integer id) {
        this .id = id;
     }
     @Column (name= "p_name" )
     public  String getName() {
        returnname;
     }
     publicvoid setName(String name) {
        this .name = name;
     }
     @Column (name= "p_age" )
     public  Integer getAge() {
        returnage;
     }
     publicvoid setAge(Integer age) {
        this .age = age;
     }
}


XML配置


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<? xml  version = "1.0" ?>
<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/HibernateMapping DTD 3.0//EN"
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
< hibernate-mapping  package = "csg.hibernate.entity" >
     < class  name = "Person"  table = "t_person" >
        < id  name = "id" >
            < column  name = "id" />
            < generator  class = "native"  />
        </ id >
        < property  name = "name"  />
        < property  name = "age"  />
        < join  table = "t_p"  optional = "true" >
            < key  column = "p_id" ></ key >
            < many-to-one  name = "group"  column = "g_id"  class = "Group"  unique = "true" />
        </ join >
     </ class >
</ hibernate-mapping >
1
2
3
4
5
6
7
8
9
10
11
12
13
<? xml  version = "1.0" ?>
<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/HibernateMapping 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" >
            < column  name = "id" />
            < generator  class = "native"  />
        </ id >
        < property  name = "name"  />
     </ class >
</ hibernate-mapping >


写这篇文章,我特意查询了一下网上的文章,发现大家都是采用XML配置的,所以我这里也写了Annotations配置,因为JPA中的Annotations使用起来远比XML要方便!OK?










本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1568948,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
SQL XML Java
Hibernate - 单向多对一关联关系映射
Hibernate - 单向多对一关联关系映射
15 0
|
9月前
|
SQL XML Java
Hibernate框架【四】——基本映射——多对一和一对多映射
Hibernate框架【四】——基本映射——多对一和一对多映射
102 0
|
存储 Oracle 关系型数据库
hibernate在数据库生成hibernate_sequence表问题
hibernate在数据库生成hibernate_sequence表问题
123 0
|
存储 Java 数据库连接
【SSH快速进阶】——Hibernate继承映射:每个具体类映射一张表
  上篇文章说的是每个类映射一张表,不管是父类还是子类。与上篇文章不同的是,这里是每个“具体类”映射一张表,什么意思呢?就是让每个子类(具体的、有意义的类)映射一张表。
【SSH快速进阶】——Hibernate继承映射:每个具体类映射一张表
|
存储 Java 数据库连接
【SSH快速进阶】——Hibernate继承映射:每个类映射一张表
上文说了每棵继承树映射一张表,本文继续描述让每个类都映射一张表的配置。
【SSH快速进阶】——Hibernate继承映射:每个类映射一张表
|
存储 Java 数据库连接
【SSH快速进阶】——Hibernate继承映射:每棵继承树映射一张表
  我们都知道,Hibernate最大的一个优点就是使开发更加“面向对象”,类与类之间有继承关系,Hibernate中也对这种继承关系提供了映射的封装。
【SSH快速进阶】——Hibernate继承映射:每棵继承树映射一张表
|
Java 数据库连接 网络安全
【SSH快速进阶】——Hibernate 多对一映射 和 一对多映射
上两篇文章说了一对一映射,这里说一下多对一 和 一对多的映射情况。
【SSH快速进阶】——Hibernate 多对一映射 和 一对多映射
|
Java 数据库连接 数据库
hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系
  前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hibernate还提供了注解方式配置映射文件,非常灵活,减少了配置文件的冗余,虽然维护起来相对比较麻烦,但是的确很方便开发.
1063 0