Hibernate之关于一对多,多对一双向关联映射

简介:

由于一对多,和多对一的双向关联映射基本上一样,所以这里就一起写下来!


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
@Entity
@Table (name= "t_group" )
publicclass Group {
     private  Integer id;
     private  String name;
     private  Set<Person> persons=newHashSet<Person>(); //set不允许重复,最适合数据库模型
     @Id
     @GeneratedValue
     public  Integer getId() {
        returnid;
     }
     publicvoid setId(Integerid) {
        this .id = id;
     }
     @Column (name= "t_name" )
     public  String getName() {
        returnname;
     }
     publicvoid setName(Stringname) {
        this .name = name;
     }
     @OneToMany (mappedBy= "group" ) //意识是告诉Hibernate的关联关系应该设在Person,多的一方
//  只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;
     public  Set<Person>getPersons() {
        returnpersons;
     }
     publicvoidsetPersons(Set<Person> persons) {
        this .persons = persons;
     }
}
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_person" )
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= "p_name" )
     public  String getName() {
        returnname;
     }
     publicvoid setName(Stringname) {
        this .name = name;
     }
     @Column (name= "p_age" )
     public  Integer getAge() {
        returnage;
     }
     publicvoid setAge(Integerage) {
        this .age = age;
     }
}


XML配置


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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" >
            <column name= "id" />
            <generator  class = "native"  />
        </id>
        <property name= "name"  />
        <set name= "persons" >
            <key column= "groupId" />
            <one-to-many  class = "csg.hibernate.entity.Person" />
        </set>
     </ class >
</hibernate-mapping>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<? 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_person" >
        < id  name = "id" >
            < column  name = "id" />
            < generator  class = "native"  />
        </ id >
        < property  name = "name"  />
        < property  name = "age"  />
        < many-to-one  name = "group"  column = "groupId" />
     </ class >
</ hibernate-mapping >

由上大家都可以得出疑问?

为什么双向关联在Groupkey需要指定column而在Person中也需要指定column呢?

如果其中一个不指定会有什么后果?

如果指定的column不一致又会有什么后果?

大家可以试一下!











本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1568892,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
Java 数据库连接 API
解锁高效开发秘籍:深入探究 Hibernate 如何优雅处理一对多与多对多关系,让数据映射再无烦恼!
【9月更文挑战第3天】Hibernate 是 Java 领域中最流行的 ORM 框架之一,广泛用于处理实体对象与数据库表之间的映射。尤其在处理复杂关系如一对多和多对多时,Hibernate 提供了丰富的 API 和配置选项。本文通过具体代码示例,展示如何使用 `@OneToMany`、`@JoinColumn`、`@ManyToMany` 和 `@JoinTable` 等注解优雅地实现这些关系,帮助开发者保持代码简洁的同时确保数据一致性。
50 4
|
6月前
|
SQL XML Java
Hibernate - 单向多对一关联关系映射
Hibernate - 单向多对一关联关系映射
39 0
|
SQL XML Java
Hibernate框架【四】——基本映射——多对一和一对多映射
Hibernate框架【四】——基本映射——多对一和一对多映射
172 0
|
Java 数据库连接
hibernate一对多关系操作
hibernate一对多关系操作
167 1
hibernate一对多关系操作
|
XML Java 数据库连接
《Hibernate上课笔记》------class6------Hibernate实现一对多关联映射
《Hibernate上课笔记》------class6------Hibernate实现一对多关联映射
61 0
《Hibernate上课笔记》------class6------Hibernate实现一对多关联映射
|
XML Java 关系型数据库
hibernate里面的一对多关系映射
hibernate里面的一对多关系映射
111 0
|
存储 Java 数据库连接
【框架】[Hibernate]利用Hibernate进行一对多的级联操作-Web实例
【框架】[Hibernate]利用Hibernate进行一对多的级联操作-Web实例
182 0
【框架】[Hibernate]利用Hibernate进行一对多的级联操作-Web实例
|
6月前
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate
|
18天前
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
12 1
|
3月前
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
47 1