JPA的一对多映射(单向)
来源:互联网 发布:js伪类选择器 编辑:程序博客网 时间:2024/05/22 08:28
注意:这里说的是一对多的单向关联,不是一对多的双向关联。
实体Author:作者。
实体Book:作者写的书。
Author和Book是一对多的关系。
在JPA中,用@OneToMany来标识一对多的关系。实现一对多的单向关联,只需在代表一的实体(Author)中使用@OneToMany映射标注就可以了,代表多的实体不需要使用任何映射标注。
有两种方式实现一对多的单向关联。一种是在只使用@OneToMany来标识,这种方式是通过一张第三方表来保存关系。还有一种是使用@OneToMany和@JoinColumn来标注,这种方式是在多的一方(Book)的表中增加一个外键列来保存关系。
第一种方式,通过一张第三方表来实现一对多的单向关联:
Author.java如下,需要注意private Set books = new HashSet()的注解。只是使用了@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 Luxh19 */20 21 @Entity22 @Table(name="author")23 public class Author {24 25 @Id26 @GeneratedValue27 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 Luxh12 */13 14 @Entity15 @Table(name="book")16 public class Book {17 18 @Id19 @GeneratedValue20 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 books = new HashSet()加上标注@OneToMany实现单向关联。这样就通过一个关联表来实现这种关联。生成数据库表如下,会以Author的表名和下划线和Book的表名生成一张表author_book来保存Author和Book的一对多单向映射。
在author_book表中,存的是Auhtor的id和Book的id:
第二种方式,通过在多方(Book)的表中增加一个外键列实现一对多的单向关联。
Author.java如下,需要注意private Set books = new HashSet()的注解。同时使用了@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 Luxh20 */21 22 @Entity23 @Table(name="author")24 public class Author {25 26 @Id27 @GeneratedValue28 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的一对多映射(单向)
- JPA的一对多映射(单向)
- JPA学习笔记-映射单向一对多的关联关系
- JPA映射关联关系-单向一对多
- Sping Data Jpa 一对多单向映射
- 单向一对多的关联映射
- JPA一对多单向关联
- 一对多单向关联映射
- JPA - 一对多自身映射
- JPA一对多映射案例
- jpa一对多映射案例
- jpa 一对多单向关联 插入问题
- JPA——单向一对多
- Hibernate单向一对多JPA注解
- JPA 菜鸟教程 4 单向一对多
- hibernate4- 单向多对一、一对多的关联映射
- JPA关联映射 - 一对多映射
- Hibernate单向一对多映射和双向一对多映射
- 基于OpenCV的图像模糊与否检测
- 解决Hibernate:could not initialize proxy
- redis配置文件的介绍
- 单点登录(二)----实战------简单搭建CAS---测试认证方式搭建CAS
- 【剑指offer系列之二叉树】判断是否为平衡二叉树
- JPA的一对多映射(单向)
- 注册Tomcat为系统服务
- python 生日悖论概率计算。
- mysql do和select 的区别与联系
- jvm 参数设置
- 基于Socket.IO实现Android聊天功能
- CAD文件(dwg)的加载-ArcEngine
- 在ubuntu16.04_X86-64环境下快速搭建GPU版本的tensorflow
- 上帝与集合的正确用法 HYSBZ