`
endual
  • 浏览: 3544610 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JPA的一对多映射(单向)

    博客分类:
  • JPA
 
阅读更多

 

JPA的一对多映射(单向)

Posted on 2012-05-27 17:23 CN.programmer.Luxh 阅读(560) 评论(0编辑 收藏 

  注意:这里说的是一对多的单向关联,不是一对多的双向关联。

  实体Author:作者。

  实体Book:作者写的书。

  Author和Book是一对多的关系。

  在JPA中,用@OneToMany来标识一对多的关系。实现一对多的单向关联,只需在代表一的实体(Author)中使用@OneToMany映射标注就可以了,代表多的实体不需要使用任何映射标注。

  有两种方式实现一对多的单向关联。一种是在只使用@OneToMany来标识,这种方式是通过一张第三方表来保存关系。还有一种是使用@OneToMany和@JoinColumn来标注,这种方式是在多的一方(Book)的表中增加一个外键列来保存关系。


  第一种方式,通过一张第三方表来实现一对多的单向关联:

  Author.java如下,需要注意private Set<Book> books = new HashSet<Book>()的注解。只是使用了@OneToMany。

复制代码
 1 package com.cndatacom.jpa.entity;
 2 
 3 import java.util.HashSet;
 4 import java.util.Set;
 5 
 6 import javax.persistence.CascadeType;
 7 import javax.persistence.Column;
 8 import javax.persistence.Entity;
 9 import javax.persistence.FetchType;
10 import javax.persistence.GeneratedValue;
11 import javax.persistence.Id;
12 import javax.persistence.OneToMany;
13 import javax.persistence.Table;
14 
15 
16 /**
17  *  作者
18  * @author Luxh
19  */
20 
21 @Entity
22 @Table(name="author")
23 public class Author {
24     
25     @Id
26     @GeneratedValue
27     private Long id;
28     
29     /**作者的名字*/
30     @Column(length=32)
31     private String name;
32     
33     /**作者写的书*/
34     @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)//级联保存、更新、删除、刷新;延迟加载
35     private Set<Book> books = new HashSet<Book>();
36     
37     
38     
39     public Long getId() {
40         return id;
41     }
42 
43 
44     public void setId(Long id) {
45         this.id = id;
46     }
47 
48 
49     public String getName() {
50         return name;
51     }
52 
53 
54     public void setName(String name) {
55         this.name = name;
56     }
57 
58 
59     public Set<Book> getBooks() {
60         return books;
61     }
62 
63 
64     public void setBooks(Set<Book> books) {
65         this.books = books;
66     }
67 
68 
69     
70     
71 }
复制代码

 

  Book.java如下,因为是单向的关联,所以这个实体不需要加任何的关联标识。

  

复制代码
 1 package com.cndatacom.jpa.entity;
 2 
 3 import javax.persistence.Column;
 4 import javax.persistence.Entity;
 5 import javax.persistence.GeneratedValue;
 6 import javax.persistence.Id;
 7 import javax.persistence.Table;
 8 
 9 /**
10  * 书
11  * @author Luxh
12  */
13 
14 @Entity
15 @Table(name="book")
16 public class Book {
17     
18     @Id
19     @GeneratedValue
20     private Long id;
21     
22     /**书名*/
23     @Column(length=32)
24     private String name;
25     
26     public Long getId() {
27         return id;
28     }
29 
30     public void setId(Long id) {
31         this.id = id;
32     }
33 
34     public String getName() {
35         return name;
36     }
37 
38     public void setName(String name) {
39         this.name = name;
40     }
41 
42     
43 }
复制代码

  只在Author实体中对private Set<Book> books = new HashSet<Book>()加上标注@OneToMany实现单向关联。这样就通过一个关联表来实现这种关联。生成数据库表如下,会以Author的表名和下划线和Book的表名生成一张表author_book来保存Author和Book的一对多单向映射。

  在author_book表中,存的是Auhtor的id和Book的id:


  第二种方式,通过在多方(Book)的表中增加一个外键列实现一对多的单向关联。

  Author.java如下,需要注意private Set<Book> books = new HashSet<Book>()的注解。同时使用了@OneToMany和@JoinColumn。

复制代码
 1 package com.cndatacom.jpa.entity;
 2 
 3 import java.util.HashSet;
 4 import java.util.Set;
 5 
 6 import javax.persistence.CascadeType;
 7 import javax.persistence.Column;
 8 import javax.persistence.Entity;
 9 import javax.persistence.FetchType;
10 import javax.persistence.GeneratedValue;
11 import javax.persistence.Id;
12 import javax.persistence.JoinColumn;
13 import javax.persistence.OneToMany;
14 import javax.persistence.Table;
15 
16 
17 /**
18  *  作者
19  * @author Luxh
20  */
21 
22 @Entity
23 @Table(name="author")
24 public class Author {
25     
26     @Id
27     @GeneratedValue
28     private Long id;
29     
30     /**作者的名字*/
31     @Column(length=32)
32     private String name;
33     
34     /**作者写的书*/
35     @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)//级联保存、更新、删除、刷新;延迟加载
36     @JoinColumn(name="author_id")//在book表增加一个外键列来实现一对多的单向关联
37     private Set<Book> books = new HashSet<Book>();
38     
39     
40     
41     public Long getId() {
42         return id;
43     }
44 
45 
46     public void setId(Long id) {
47         this.id = id;
48     }
49 
50 
51     public String getName() {
52         return name;
53     }
54 
55 
56     public void setName(String name) {
57         this.name = name;
58     }
59 
60 
61     public Set<Book> getBooks() {
62         return books;
63     }
64 
65 
66     public void setBooks(Set<Book> books) {
67         this.books = books;
68     }
69 
70 
71     
72     
73 }
复制代码

  Book.java不变。

  在数据库中只生成了两张表:author和book。

  再看book表的结构,会多了一列author_id。

 

分享到:
评论

相关推荐

    jpa的实体映射关系7种

    3. **单向一对多**: 这种关系中,一个实体可以有多个其他实体与之关联,但被关联的实体并不知道这个关系。通过`@OneToMany`注解来表示,可使用`mappedBy`属性定义关联的集合属性。 4. **双向一对多**: 双向一对...

    jpa--9.单向多对一

    在Java Persistence API (JPA) 中,"单向多对一"关系是一种常见的对象关系映射(ORM)设计模式,用于表示实体之间的关联。在这个模式中,一个实体("多"端)可以引用另一个实体("一"端),但被引用的实体并不持有对...

    jpa--10.单向一对多

    在Java Persistence API (JPA) 中,"单向一对多"是一种常见的关系映射类型,它代表了数据库中两个实体间的一种关联。这种关联意味着一个实体(“一方”)可以与多个其他实体(“多方”)相关联,而反过来,多方并不...

    JPA-4 映射关联关系

    JPA 提供了多种方式来处理不同类型的关联关系,包括单向多对一、单向一对多、双向一对一、双向多对一和双向多对多。下面我们将详细探讨这些关联关系的实现方法。 1. **单向多对一关联关系(SingleManyToOne)** 在...

    尚硅谷JPA视频教程

    JPA视频_映射单向一对多的关联关系 · 14. JPA视频_映射双向一对多的关联关系 · 15. JPA视频_映射双向一对一的关联关系 · 16. JPA视频_映射双向多对多的关联关系 · 17. JPA视频_二级缓存 · 18. JPA视频_...

    使用jpa映射关联和继承

    2. **一对多(OneToMany)映射**:一个实体对象可以对应多个子对象。使用`@OneToMany`注解,可以设置`mappedBy`属性,表示关联的反向引用。还可以设置`fetch`策略(EAGER或LAZY),控制关联数据是否在加载主体对象时...

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

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

    13_jpa多对多双向关联实体定义与注解

    4. **注解细节**:`@JoinColumn`用于单向一对一或一对多关系,而在多对多关系中,通常使用`@JoinTable`来指定中间表的信息,包括表名、连接列等。 5. **操作关联**:在JPA中,可以通过添加或移除对象到集合属性来...

    Hibernate一对多单向关联映射

    通过以上内容,我们对Hibernate中的一对多单向关联映射有了全面的理解,包括其配置方式、代码实现、使用技巧以及需要注意的细节。在实际项目开发中,正确理解和运用这些知识能够有效地提升数据操作的效率和代码的可...

    14_传智播客JPA详解_JPA中的多对多双向关联的各项关系操作

    在JPA中,多对多(Many-to-Many)关联是一种常见的关系类型,适用于描述两个实体之间复杂的关系。本教程将深入探讨JPA中多对多双向关联的各个方面及其操作。 在数据库中,多对多关联意味着一个实体可以与多个其他...

    一对多单向关联关系实现元源码

    在Java编程语言中,特别是在开发基于JPA(Java Persistence API)和ORM(对象关系映射)框架如Hibernate的应用时,一对多单向关联关系是一种常见的数据模型设计。这种关系表示一个实体可以与多个其他实体相关联,而...

    hibernate多对一单向关联关系实现源码

    在Java的持久化框架Hibernate中,多对一(ManyToOne)关联关系是一种常见的对象关系映射(ORM)场景。这种关系通常出现在一个实体类拥有多条与另一个实体类相关的记录,而另一个实体类可能只有一条对应的记录。例如...

    jpa--11.双向一多

    本篇文章将深入探讨双向一对多的关系映射及其配置。 1. **双向一对多关系的概念** 双向一对多关系意味着两个实体类之间存在一个从属关系,其中一方实体可以拥有多个另一方实体的实例,同时另一方实体也能够引用返回...

    JPA教程详解,这是个word文档,需要的可以拿走

    - **一对多映射**:使用`@OneToMany`注解表示,允许一个实体的实例与多个其他实体的实例相关联。 - **多对一映射**:使用`@ManyToOne`注解定义,多个实体的实例可与另一个实体的单个实例相关联。 - **多对多映射**:...

    JPA.rar_jpa

    3. **实体关系(Entity Relationships)**:JPA支持多种关系映射,如一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany),这些关系可以是单向或双向的。 4. **持久化上下文...

    JPA关联关系

    本文将深入探讨JPA中的四种主要关联关系:一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)。 1. **一对一关联(OneToOne)** 在一对一关联中,一个实体实例对应数据库中的唯...

    CH02-关联映射、缓存.pptx

    熟练使用JPA的关联映射 多对一,一对多单向 双向多对一关联 双向一对一关联 双向多对多关联 会使用JPA的二级缓存

    JPA_OneToMany学习教程

    "JPA_OneToMany"是JPA中的一个关键概念,涉及实体之间的关联关系,特别是在处理一对多关系时。本教程将深入探讨JPA中的OneToMany映射关系,以及如何在实际开发中有效地应用。 1. **OneToMany关系**:在关系数据库中...

Global site tag (gtag.js) - Google Analytics