`
huttoncs
  • 浏览: 201093 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate,JPA对象关联关系映射

    博客分类:
  • jpa
 
阅读更多


 关联关系映射,是映射关系中比较复杂的一种映射关系,总的说来有一对一、一对多和多对多几种关系。细分起来他们又有单向和双向之分。下面我们逐一介绍一下。

单向 OneToOne

单向一对一是关联关系映射中最简单的一种,简单地说就是可以从关联的一方去查询另一方,却不能反向查询。我们用下面的例子来举例说明,清单 1 中的 Person 实体类和清单 2 中的 Address 类就是这种单向的一对一关系,我们可以查询一个 Person 的对应的 Address 的内容,但是我们却不能由一个 Address 的值去查询这个值对应的 Person。

清单 1. 单向一对一关系的拥有端

 @Entity 
 public class Person implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 
    private int age; 
    @OneToOne 
 private Address address; 

 //   Getters & Setters 
 } 

清单 2. 单向一对一关系的反端

 

 @Entity 
 public class Address implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String street; 
    private String city; 
 private String country; 
 // Gettes& Setters 
 } 

图 1. 单向一对一关系对应的 ER 图



 从图 1 他们的 ER 图上可以看出,这种单向的一对一关系在数据库中是以外键的形式被映射的。其中关系的发出端存储一个指向关系的接收端的一个外键。在这个例子中 Person 表中的 ADDRESS_ID 就是指向 address 标的一个外键,缺省情况下这个外键的字段名称,是以它指向的表的名称加下划线“_”加“ID”组成的。当然我们也可以根据我们的喜好来修改这个字段,修改的办法就是使用 @JoinColumn 这个注解。在这个例子中我们可以将这个注解注释在 Person 类中的 Address 属性上去。

 

双向 OneToOne

双向关系有一方为关系的拥有端,另一方是关系的反端,也就是“Inverse”端。在这里例子中 Person 拥有这个关系,而 Address 就是关系的“Inverse”端。Address 中我们定义了一个 person 属性,在这个属性上我们使用了 @OneToOne 注解并且定义了他的“mappedBy”属性,这个在双向关系的“Inverse”端是必需的,在下面将要介绍的双向关系中也要用到这个属性。

清单 3. 双向一对一关系中的接受端

 @Entity 
 public class Address implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String street; 
    private String city; 
 private String country; 
 @OneToOne(mappedBy = "address") 
 private Person person; 
 // Gettes& Setters 

 } 

单向 OneToMany

单向关系的一对多我们可以用清单 4 和清单 5 来说明。在关系的发出端 Person 中我们使用 OneToMany 这个注解对 cellPhones 这个属性进行了注释,cellPhones 中存储的是 CellPhone 的一个 List 对象,JPA 就是用这种方式实现一对多的。

清单 4. 单向一对多关系的发出端

 public class Person implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 
    private int age; 
    @OneToMany 
    private List<CellPhone> cellPhones; 
    // Getters and Setters 
 } 

清单 5. 单向一对多关系的接收端

 @Entity 
 public class CellPhone implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String manufacture; 
    private String color; 
    private Long  phoneNo; 
    // Getters and Setters 
 } 
图 2. 单向一对多关系对应的 ER 图


 在一对多关联关系映射中,默认是以中间表的方式来映射这种关系的。如在本例中,中间表为 person_cellphone,表的名称为关系的拥有端和 Inverse 端中间用下划线连接。中间表的字两个字段分别为两张表的得表名加下划线“_”加 ID 组成。当然我们也可以改表这种默认的中间表的映射方式,我们可以在关系的拥有端使用 @JoinClolum 来使用外键的方式映射这个关系。



双向 OneToMany

清单 6. 双向一对多关系的接受端

 @Entity 
 public class Person implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 
    private int age; 
  
    @OneToMany(mappedBy = "person") 
    private List<CellPhone> cellPhones; 
    // Getters and Setters 
 } 

清单 7. 双向一对多关系的发出端

 @Entity 
 public class CellPhone implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    
    private String manufacture; 
    private String color; 
    private Long  phoneNo; 
    @ManyToOne 
    private Person person; 
    // Getters and Setters 
 } 
图 3. 双向一对多关系对应的 ER 图



 

单向 ManyToMany

多对多关联关系中只能通过中间表的方式进行映射。本例的单向多对多关系如下所示。

在清单 8 中我们使用了 ManyToMany 这个注解来对 Teacher 中的 Students 进行注释,其中 Teacher 就是关系的发出端。而在 Student 中我们并没有作任何定义,这是单向多对多的所要求的。

清单 8. 单向多对多关系的发出端

 @Entity 
 public class Teacher implements Serializable { 
   
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 
    private Boolean gender; 
    private int age; 
    private int height; 
    @ManyToMany 
 private List<Student> students; 
 // Getters  and  Setters 
 } 

清单 9. 单向多对多关系的反端

 @Entity 
 public class Student implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 
    private Boolean gender; 
    private int age; 
    private int height; 
   //Getters  and  Setters 
 } 

图 4. Teacher 对应得数据库表



 图 5. Students 对应得数据库表

 图 6. 中间生成表



 

双向 ManyToMany

清单 10. 双向多对多关系的拥有端

 @Entity 
 public class Teacher implements Serializable { 
   
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 
    private Boolean gender; 
    private int age; 
    private int height; 
    @ManyToMany 
 private List<Student> students; 
 // Getters  and  Setters 
 } 

清单 11. 双向多对多关系的反端

 @Entity 
 public class Student implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    private String name; 
    private Boolean gender; 
    private int age; 
    private int height; 
    @ManyToMany(mappedBy = "students") 
    private List<Teacher> teachers; 
    //Getters  and  Setters 
 } 

图 7. 双向多对多关系对应的 ER 图



 

  • 大小: 28 KB
  • 大小: 20.7 KB
  • 大小: 27 KB
  • 大小: 10.4 KB
  • 大小: 7 KB
  • 大小: 4.7 KB
  • 大小: 25.9 KB
分享到:
评论

相关推荐

    hibernate 对象关系映射总结hibernate 对象关系映射总结

    本文详细介绍了Hibernate中的几种常见对象关系映射类型,包括一对一、一对多和多对多关联,并通过具体的代码示例进行了说明。这些基本的映射方式为开发者提供了灵活的解决方案,使得开发者可以根据不同的业务需求...

    hibernate_ jpa.jar

    Hibernate JPA,全称为Java Persistence API,是Java领域中用于管理数据库对象的一种规范,它为Java应用程序提供了统一的ORM(对象关系映射)解决方案。Hibernate作为JPA的一个实现,极大地简化了数据库操作,使得...

    JPA学习笔记-EJB-04JPA关联映射总结

    总之,JPA关联映射是理解和掌握JPA的关键部分,它使得Java开发者能够以面向对象的方式处理数据库关系,极大地提高了开发效率和代码的可读性。通过深入理解并熟练运用这些映射机制,可以更好地构建和维护复杂的业务...

    JPA实体关联(hibernate实现)

    在JPA中,实体间的关联映射是核心概念之一,它们定义了对象之间的关系,使得在数据库中的数据可以被对象模型所表示。以下将详细解释四种主要的关联类型:复合主键、多对多、一对一和一对多。 1. **复合主键...

    hibernate-jpa.jar

    Hibernate JPA,全称为Hibernate Java Persistence API,是Hibernate组织提供的一种基于Java平台的企业级对象关系映射(ORM)解决方案,它实现了Java Persistence API(JPA),使得Java开发者能够方便地在关系数据库...

    JPA教程,包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注

    它为Java开发者提供了一种对象关系映射(ORM)机制,将业务对象与数据库表进行映射,使得开发者可以使用面向对象的方式来操作数据库,而无需关心底层SQL语句的编写。 **1. TOPLink JPA** TOPLink JPA是Oracle公司...

    HIbernate Jpa 生成entities

    在Java开发中,Hibernate是一个广泛使用的对象关系映射(ORM)框架,而Java Persistence API (JPA) 是Java平台上的标准ORM规范。两者结合,可以让开发者轻松地将数据库表与Java类进行绑定,从而实现数据的CRUD操作。...

    JPA关联关系

    **JPA关联关系详解** Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的数据。它提供了一种对象/关系映射(ORM)机制,使得开发人员可以使用面向对象的方式来操作数据库。在JPA中,关联...

    hibernate-jpa-2.1-api-1.0.0.final.jar.zip

    其中,Hibernate作为一款功能强大的ORM框架,极大地简化了Java对象与数据库表之间的映射关系处理。而JPA(Java Persistence API)是Java EE规范的一部分,为ORM提供了标准的接口。`hibernate-jpa-2.1-api-1.0.0....

    5.Hibernate 05 Hibernate结合JPA1

    1. **对象-关系映射**:通过注解或XML配置,JPA允许开发者将Java对象映射到数据库表。 2. **查询语言**:JPA提供了一种面向对象的查询语言JPA Query Language (JPQL) 和Criteria API,可以方便地执行数据库查询,...

    jpa 关联映射jpa 关联映射jpa 关联映射

    ### JPA关联映射详解 #### 一、引言 Java Persistence API (JPA) 是 Java 平台标准的一部分,用于处理对象关系映射 (ORM)。它允许开发者以面向对象的方式开发应用程序,并通过注解将实体类映射到数据库表。在 JPA ...

    基于HibernateJPA最新案例

    在现代Java开发中,对象关系映射(ORM)框架如Hibernate已经成为必备工具,极大地简化了数据库操作。本文将深入探讨基于Hibernate的Java Persistence API (JPA)的最新应用案例,结合MyEclipse 10、JDK 1.7以及MySQL...

    hibernate-jpa-2.0-api-1.0.1.Final-sources

    JPA提供了一种对象/关系映射(ORM)框架,将面向对象的程序设计与关系数据库的结构进行了解耦。 2. **Hibernate JPA的扩展性**:Hibernate是JPA的一个实现,以其强大的功能和灵活性赢得了广泛认可。Hibernate JPA ...

    hibernate 单向多对多关联映射练习

    本练习主要关注的是Hibernate中的单向多对多关联映射,这是一种常见的关系数据库设计模式,用于表示两个实体间复杂的关系。 在多对多关联中,两个实体类可以相互拥有多个实例,但只在一个方向上建立关联。例如,...

    Hibernate关系映射

    在Java世界中,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者将数据库操作转化为面向对象的方式,极大地简化了数据持久化的复杂性。"多对一"关系映射是Hibernate支持的四种基本关联类型之一,包括一...

    Hibernate annotation JPA 一对多,多对多

    在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系映射)工具,它使得开发者可以使用面向对象的方式来操作数据库。JPA(Java Persistence API)是Java平台上的标准持久化框架,它定义了规范,而...

    Hibernate's JPA.rar

    Hibernate是一个流行的对象关系映射(ORM)框架,它使得Java开发者可以更加方便地操作数据库,而JPA是Java EE平台中的标准规范,用于管理Java应用程序中的持久性数据。 描述提到"使用Hibernate的JPA实例,包含jar...

    Hibernate part 8:一对多关联关系映射

    在Java世界中,ORM(对象关系映射)框架如Hibernate极大地简化了数据库操作。本篇文章主要探讨的是Hibernate中的一对多关联关系映射,这是在实际项目开发中非常常见的一种关系映射类型。通过理解并掌握一对多关联,...

    hibernate-jpa

    Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作。而Java Persistence API (JPA) 是Java平台上的一个标准,用于管理和持久化Java对象到关系数据库。Hibernate是JPA...

Global site tag (gtag.js) - Google Analytics