spring boot Jpa 一对多关系维护 @OneToMany
业务中经常会出现对象有一对多的关系,如 小明有多张银行等。
表结构如下:
注意这里我没有指定外键关系。
如果要持久化这些对象,按照以往的做法先生成小明,赋予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相关推荐
- JPA的单向一对多关联(oneToMany)实现示例(基于Spring Boot + JPA +MySQL,表自动维护)
本篇的环境 本篇基于Spring Boot + JPA+ MySQL. 表自动维护: 配置 ddl-auto: update,使用 Hibernate 根据类自动维护表. 本篇的示例 这里有两个类: ...
- Spring Boot JPA中关联表的使用
文章目录 添加依赖 构建Entity 构建Repository 构建初始数据 测试 Spring Boot JPA中关联表的使用 本文中,我们会将会通过一个Book和Category的关联关系,来讲解 ...
- 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 项目 ...
- spring boot jpa级联保存
spring boot jpa级联保存 CascadeType oneToMany关系 one的一方中加 @OneToMany(fetch = FetchType.EAGER, cascade = C ...
- (转)Spring Boot(五):Spring Boot Jpa 的使用
http://www.ityouknow.com/springboot/2016/08/20/spring-boot-jpa.html 在上篇文章Spring Boot(二):Web 综合开发中简单介 ...
- Spring Boot + JPA +MySQL 数据操作及示例环境搭建(自动建表)
JPA 是Java官方提供的数据持久的统一API , 是一个接口标准,并没有具体实现. JPA的实现常见的有: Hibernate TopLink (Eclipse Link) Spring Boot ...
- Spring Boot Jpa之CascadeType
Spring Boot Jpa之CascadeType JPA允许您传播从父实体到子级的状态转换.为此,JPA javax.persistence.CascadeType定义了各种级联类型: ALL ...
- 解决spring boot+JPA实现操作数据库时编辑时也变成了新增
场景:使用spring boot+JPA框架开发项目的时候,新增数据是正常的,但是编辑有时候会变成新增,JPA判断是否新增对象有两个方法:1根据id,2根据版本号.我在开发项目中用的是根据版本号进行判 ...
- Spring Boot JPA 中transaction的使用
文章目录 @Transactional的实现 @Transactional的使用 Transaction的传播级别 REQUIRED SUPPORTS MANDATORY NEVER NOT_SUPP ...
最新文章
- Java时间Calendar
- python语言介绍-Python这门语言的大概介绍
- [luogu1131][bzoj1060][ZJOI2007]时态同步【树形DP】
- leetcode 190. Reverse Bits | 190. 颠倒二进制位(移位操作,十进制二进制相互转换,打表法)
- 数据科学和人工智能技术笔记 七、特征工程
- IDEA下ANTLR Preview的使用
- 新房装修有哪些除味小妙招?
- C#控件储备——信息提示控件toolTip
- echart层级圆饼图
- matlab中pwm占空比计算代码,如何计算pwm波占空比
- Android 启动性能、启动性能分析以及常见的启动性能问题分类
- BJFU_数据结构习题_274六度空间理论
- 利用华为DTM将事件发送到Firebase
- [Python]列出100以内被7整除不被5整除的数
- java多线程百米赛跑_JAVA CountDownLatch(倒计时计数器)用法实例
- 服务器的虚拟机网速如何分配,管理ESXi主机网络与虚拟机网络
- SDH原理--2.SDH信号的帧结构
- 锦城学院计算机系考研,考研心得分享
- Oracle创建同义词及赋权
- 微信小程序——选择图片/拍照
热门文章
- 正负数二进制表示,正负数二进制移位运算、二进制源码、反码、补码
- 【报告分享】2022年互联网行业招聘白皮书-个体价值崛起-Moka(附下载)
- 发现一款数据可视化手绘神器!
- c++学习课件(四)——线程、make和cmake
- python sklearn svm 模型训练后的参数说明
- 什么样的命名才是合理的?谈命名的原则
- 微信公众号服务器配置和php代码分析
- 二叉树某个结点所在层数
- “食面埋伏”餐饮管理系统设计与实现--JAVA开发涉及UI界面、POI、连接数据库
- 微信公众平台jsapi开发教程(8)显示隐藏网页右上角菜单