业务中经常会出现对象有一对多的关系,如 小明有多张银行等。

表结构如下:

注意这里我没有指定外键关系。

如果要持久化这些对象,按照以往的做法先生成小明,赋予ID,再将这个ID设置为在银行卡的外键。

但是JPA指定了更为方便的做法。

从生成实体类开始(我使用的是IDEA)

1.添加数据源

2.生成实体类

左侧工具栏有这个窗口,没有请查看 https://blog.csdn.net/github_38336924/article/details/82788776

可选择生成实体类的位置和实体类的前缀,后缀。

生成对象

@Entity
@Table(name = "TEST_CUSTOMER")
public class TestCustomer {private String id;private String name;@Id@Column(name = "ID")@GenericGenerator(name = "idGenerator", strategy = "uuid")@GeneratedValue(generator = "idGenerator") //可在ID上面加上ID生成策略public String getId() {return id;}public void setId(String id) {this.id = id;}@Basic@Column(name = "NAME")public String getName() {return name;}public void setName(String name) {this.name = name;}//忽略部分代码

@Entity
@Table(name = "TEST_CUSTOMER", schema = "WXD")
public class TestCustomer {private String id;private String name;@Id@Column(name = "ID")@GenericGenerator(name = "idGenerator", strategy = "uuid")@GeneratedValue(generator = "idGenerator") //可在ID上面加上ID生成策略public String getId() {return id;}public void setId(String id) {this.id = id;}@Basic@Column(name = "NAME")public String getName() {return name;}public void setName(String name) {this.name = name;}

PS:列的注解也可以直接写在属性上也可以直接忽略(@Id 主键注解不可忽略),

实现一对多关系维护

//在TestCustomer中加入以下代码
private List<TestCard> cardList;@OneToMany(cascade = {CascadeType.ALL,fetch = FetchType.EAGER})@JoinColumn(name = "CUSTOMER_ID")public List<TestCard> getCardList() {return cardList;}public void setCardList(List<TestCard> cardList) {this.cardList = cardList;}

代码解释

@OneToMany  表明此属性是一对多的关系 cascade属性是

FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载

FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载

注意:这里为了方便测试 用了EAGER,平时写使用LAZY就行。我理解的区别就是:lazy模式用到了那个属性才会加载,eager是总会加载。

@JoinCloum 表明关联字段关系,name属性的值是数据库中字段名  PS:因为建表时我们并有创建真实的外键所以用这个注解  如果表中声明了外键 则可以直接在  @OneToMany 中键入 mappedBy = "customerId"  这个值是实体的属性名 不是数据库的字段名,使用mappedBy后 可不用@JoinCloum注解。

OK 测试一下!

package com.lsj.demo.myproject;import com.lsj.demo.myproject.entity.TestCard;
import com.lsj.demo.myproject.entity.TestCustomer;
import com.lsj.demo.myproject.persist.TestCardDao;
import com.lsj.demo.myproject.persist.TestCustomerDao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.ArrayList;
import java.util.List;@RunWith(SpringRunner.class)
@SpringBootTest
public class MyprojectApplicationTests {@AutowiredTestCardDao testCardDao;@AutowiredTestCustomerDao testCustomerDao;@Testpublic void contextLoads() {TestCustomer customer= new TestCustomer();customer.setName("小明");List<TestCard> cardList=new ArrayList<>();TestCard card1 =new TestCard();card1.setCardName("工商银行");cardList.add(card1);TestCard card2 =new TestCard();card2.setCardName("中国银行");cardList.add(card2);customer.setCardList(cardList);testCustomerDao.save(customer);}}

查看数据

OK 再来试试查询

    @Testpublic void contextLoads2() {TestCustomer testCustomer = testCustomerDao.findById("bcc085dd679cd1a901679cd1ba760000").get();System.out.println(JSONObject.toJSONString(testCustomer));}

只是为了回顾一下前段时间遇到的问题,并没有往深了研究,如果没有帮助到你,实在抱歉

spring boot Jpa 一对多关系维护 @OneToMany相关推荐

  1. JPA的单向一对多关联(oneToMany)实现示例(基于Spring Boot + JPA +MySQL,表自动维护)

    本篇的环境 本篇基于Spring Boot + JPA+ MySQL. 表自动维护: 配置 ddl-auto: update,使用 Hibernate 根据类自动维护表. 本篇的示例 这里有两个类: ...

  2. Spring Boot JPA中关联表的使用

    文章目录 添加依赖 构建Entity 构建Repository 构建初始数据 测试 Spring Boot JPA中关联表的使用 本文中,我们会将会通过一个Book和Category的关联关系,来讲解 ...

  3. Spring Boot JPA 2.7.2

    icon: edit date: 2022-01-02 category: CategoryA tag: tag A tag B star: true Spring Boot JPA 2.7.2 项目 ...

  4. spring boot jpa级联保存

    spring boot jpa级联保存 CascadeType oneToMany关系 one的一方中加 @OneToMany(fetch = FetchType.EAGER, cascade = C ...

  5. (转)Spring Boot(五):Spring Boot Jpa 的使用

    http://www.ityouknow.com/springboot/2016/08/20/spring-boot-jpa.html 在上篇文章Spring Boot(二):Web 综合开发中简单介 ...

  6. Spring Boot + JPA +MySQL 数据操作及示例环境搭建(自动建表)

    JPA 是Java官方提供的数据持久的统一API , 是一个接口标准,并没有具体实现. JPA的实现常见的有: Hibernate TopLink (Eclipse Link) Spring Boot ...

  7. Spring Boot Jpa之CascadeType

    Spring Boot Jpa之CascadeType JPA允许您传播从父实体到子级的状态转换.为此,JPA javax.persistence.CascadeType定义了各种级联类型: ALL ...

  8. 解决spring boot+JPA实现操作数据库时编辑时也变成了新增

    场景:使用spring boot+JPA框架开发项目的时候,新增数据是正常的,但是编辑有时候会变成新增,JPA判断是否新增对象有两个方法:1根据id,2根据版本号.我在开发项目中用的是根据版本号进行判 ...

  9. Spring Boot JPA 中transaction的使用

    文章目录 @Transactional的实现 @Transactional的使用 Transaction的传播级别 REQUIRED SUPPORTS MANDATORY NEVER NOT_SUPP ...

最新文章

  1. Java时间Calendar
  2. python语言介绍-Python这门语言的大概介绍
  3. [luogu1131][bzoj1060][ZJOI2007]时态同步【树形DP】
  4. leetcode 190. Reverse Bits | 190. 颠倒二进制位(移位操作,十进制二进制相互转换,打表法)
  5. 数据科学和人工智能技术笔记 七、特征工程
  6. IDEA下ANTLR Preview的使用
  7. 新房装修有哪些除味小妙招?
  8. C#控件储备——信息提示控件toolTip
  9. echart层级圆饼图
  10. matlab中pwm占空比计算代码,如何计算pwm波占空比
  11. Android 启动性能、启动性能分析以及常见的启动性能问题分类
  12. BJFU_数据结构习题_274六度空间理论
  13. 利用华为DTM将事件发送到Firebase
  14. [Python]列出100以内被7整除不被5整除的数
  15. java多线程百米赛跑_JAVA CountDownLatch(倒计时计数器)用法实例
  16. 服务器的虚拟机网速如何分配,管理ESXi主机网络与虚拟机网络
  17. SDH原理--2.SDH信号的帧结构
  18. 锦城学院计算机系考研,考研心得分享
  19. Oracle创建同义词及赋权
  20. 微信小程序——选择图片/拍照

热门文章

  1. 正负数二进制表示,正负数二进制移位运算、二进制源码、反码、补码
  2. 【报告分享】2022年互联网行业招聘白皮书-个体价值崛起-Moka(附下载)
  3. 发现一款数据可视化手绘神器!
  4. c++学习课件(四)——线程、make和cmake
  5. python sklearn svm 模型训练后的参数说明
  6. 什么样的命名才是合理的?谈命名的原则
  7. 微信公众号服务器配置和php代码分析
  8. 二叉树某个结点所在层数
  9. “食面埋伏”餐饮管理系统设计与实现--JAVA开发涉及UI界面、POI、连接数据库
  10. 微信公众平台jsapi开发教程(8)显示隐藏网页右上角菜单