当前位置: 首页 > news >正文

JPA联合主键

​ 在实际工作中,我们会经常遇到联合主键的情况,所以我用简单例子列举JPA两种实现联合主键的方式。

1、如何通过@IdClass 实现联合主键

第一步:新建一个UserInfoID类,里面是联合主键

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserInfoID implements Serializable {private String name, telephone;
}

第二步:新建一个UserInfo实体,采用@IdClass引用联合主键

@Entity
@Data
@Builder
@IdClass(UserInfoID.class)
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo {private Integer ages;@Idprivate String name;@Idprivate String telephone;
}

第三步:新建一个UserInfoRepsitory类完成CRUD

@Repository
public interface UserInfoRepository  extends JpaRepository< UserInfo,UserInfoID> {
}

第四步:写一个测试

@SpringBootTest
class SpringDataJpaTestApplicationTests {@Resourceprivate UserInfoRepository userInfoRepository;@Testpublic void testIdClass() {userInfoRepository.save(UserInfo.builder().ages(29).name("sunfeng").telephone("18854885488").build());Optional<UserInfo> userInfoOptional = userInfoRepository.findById(UserInfoID.builder().name("sunfeng").telephone("18854885488").build());userInfoOptional.ifPresent(System.out::println);}}

通过上面的例子可以发现表的主键是primary key(name, telephone),而Entity里面不是一个@Id字段了

2、@Embeddable与@EmbedDedId注解使用

第一步:我们在上面的例子中的UserInfoID里面添加@Embeddable注解

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Embeddable
public class UserInfoID implements Serializable {private String name, telephone;
}

第二步:修改一下我们刚才的UserInfo对象,删除@IdClass添加 @EmbeddedId注解

@Entity
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo {private Integer ages;@EmbeddedIdprivate UserInfoID userInfoID;}

第三部:其他不变我们修改一下测试用例

@SpringBootTest
class SpringDataJpaTestApplicationTests {@Resourceprivate UserInfoRepository userInfoRepository;@Testpublic void testIdClass() {userInfoRepository.save(UserInfo.builder().ages(29).userInfoID(UserInfoID.builder().name("sunfeng").telephone("18854885488").build()).build());Optional<UserInfo> userInfoOptional = userInfoRepository.findById(UserInfoID.builder().name("sunfeng").telephone("18854885488").build());userInfoOptional.ifPresent(System.out::println);}

运行完之后,可以得到相同的结果。那么两种方式之间的区别是什么?

  1. 在使用的时候 @EmbeddedId使用的是对象,而IdClass用的是具体的字段
  2. 二者的JPQL也会不一样
    1. @IdClass的JPQL写法是:SELECT u.name FROM UserIndo u
    2. @EmbeddedId的JPQL写法是:select u.userInfo.name FROM UserInfo u

相关文章:

JPA联合主键

​ 在实际工作中&#xff0c;我们会经常遇到联合主键的情况&#xff0c;所以我用简单例子列举JPA两种实现联合主键的方式。 1、如何通过IdClass 实现联合主键 第一步:新建一个UserInfoID类&#xff0c;里面是联合主键 Data Builder NoArgsConstructor AllArgsConstructor pu…...

水性杨花:揭秘CSS响应式界面设计,让内容灵活自如,犹如水之变幻

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、是…...

fio performance test

fio参数解释 可以使用fio -help查看每个参数&#xff0c;具体的参数左右可以在官网查看how to文档&#xff0c;如下为几个常见的参数描述 filename/dev/emcpowerb 支持文件系统或者裸设备&#xff0c;-filename/dev/sda2或-filename/dev/sdb 或 -filename/dev/nvme0n1direct…...

DevOps持续集成-Jenkins(1)

文章目录 DevOpsDevOps概述Code阶段工具&#xff08;centos7-gitlab主机&#xff09;Windows下安装Git&#xff08;作用是&#xff1a;使我们可以上传代码到GitLab&#xff09;Linux下安装GitLab⭐&#xff08;作用是&#xff1a;运行一个GitLab接收代码&#xff09;环境准备先…...

Pytorch代码入门学习之分类任务(二):定义数据集

一、导包 import torch import torchvision import torchvision.transforms as transforms 二、下载数据集 2.1 代码展示 # 定义数据加载进来后的初始化操作&#xff1a; transform transforms.Compose([# 张量转换&#xff1a;transforms.ToTensor(),# 归一化操作&#x…...

oracle 里常用的一些 create insert update table

1、获得数据库里某个指定的库 SELECT COUNT(*) FROM ALL_TABLES ut WHERE ut.OWNERTJFX AND ut.TABLE_NAME CUR_TIME_BILL; 2、创建一个表&#xff0c;里面的数据可以从一个已存在的表里转移过来 CREATE TABLE temptable AS SELECT * FROM old_tbName //使用现有的表创建一…...

从Mysql架构看一条查询sql的执行过程

1. 通信协议 我们的程序或者工具要操作数据库&#xff0c;第一步要做什么事情&#xff1f; 跟数据库建立连接。 首先&#xff0c;MySQL必须要运行一个服务&#xff0c;监听默认的3306端口。在我们开发系统跟第三方对接的时候&#xff0c;必须要弄清楚的有两件事。 第一个就是通…...

Linux系统下DHCP服务安装部署和使用实例详解(蜜罐)

目录 一、概述 二、具体配置如下&#xff1a; 一、概述 DHCP &#xff1a;动态主机设置协议&#xff08;英语&#xff1a;Dynamic Host Configuration Protocol&#xff0c;DHCP&#xff09;是一个局域网的网络协议&#xff0c;使用UDP协议工作&#xff0c;主要有两个用途&…...

模数转换器-ADC基础

文章目录 一、ADC是什么二、ADC处理采样保持量化编码三、ADC采样的重要参数:测量范围:分辨率(Resolution):精度:采样时间:采样率(Sampling Rate):信噪比(Signal-to-Noise Ratio, SNR):转换时间:一、ADC是什么 ADC(Analog-to-Digital Converter):模拟数字转换器…...

Linux:【1】Linux中的文件权限概念和相关命令

Linux&#xff1a;【1】Linux中的文件权限概念和相关命令 1、什么是文件权限&#xff1f;1.1、文件权限的表示方式 2、理解文件权限2.1、用户权限2.2、组权限2.3、其他权限 3、设置文件权限3.1、chmod 命令3.2、权限符号表示法3.3、权限数字表示法 4、查看文件权限4.1、ls 命令…...

JS实用小计

1.如何创建一个数组大小为100&#xff0c;每个值都为0的数组 // 方法一: Array(100).fill(0);// 方法二: // 注: 如果直接使用 map&#xff0c;会出现稀疏数组 Array.from(Array(100), (x) > 0);// 方法二变体: Array.from({ length: 100 }, (x) > 0); 2.如何逆序一个字…...

Android---Bitmap详解

每一个 Android App 中都会使用到 Bitmap&#xff0c;它也是程序中内存消耗的大户&#xff0c;当 Bitmap 使用内存超过可用空间&#xff0c;则会报 OOM。 Bitmap 占用内存分析 Bitmap 用来描述一张图片的长、宽、颜色等信息&#xff0c;可用使用 BitmapFactory 来将某一路径下…...

设计高信度和效度的问卷:关键要点与技巧

设计调查问卷是任何研究过程中至关重要的一部分&#xff0c;无论是出于学术目的还是商业目的。调查是用于收集数据的常用工具&#xff0c;它们可以为消费者行为、意见、客户满意度和其他重要因素提供有价值的见解。然而&#xff0c;调查的可靠性和有效性对于确保收集的数据准确…...

从工厂到社会:探索如何应用设计模式工厂模式

文章目录 &#x1f31f; 将设计模式工厂模式运用到社会当中&#x1f34a; 工厂模式在社会中的应用&#x1f389; 工厂&#x1f389; 餐厅&#x1f389; 运输 &#x1f34a; 工厂模式的优势&#x1f389; 代码简洁&#x1f389; 扩展性强&#x1f389; 便于维护和管理 &#x1f…...

slice()和splice()用法

前言&#xff1a; slice()和splice()都是JavaScript中数组的方法&#xff0c;但是它们的用法有所不同。接下来让我们详细分析一下他们的不同之处。 slice()&#xff1a; slice()方法返回一个数组的一部分&#xff0c;不会改变原始数组&#xff0c;而是返回一个新数组。 语法…...

基于windows10的pytorch环境部署及yolov8的安装及测试

第一章 pytorch环境部署留念 第一步&#xff1a;下载安装anaconda 官网地址 &#xff08;也可以到清华大学开源软件镜像站下载&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/&#xff09; 我安装的是下面这个&#xff0c;一通下一步就完事儿。 第二步…...

面试算法40:矩阵中的最大矩形

题目 请在一个由0、1组成的矩阵中找出最大的只包含1的矩形并输出它的面积。例如&#xff0c;在图6.6的矩阵中&#xff0c;最大的只包含1的矩阵如阴影部分所示&#xff0c;它的面积是6。 分析 直方图是由排列在同一基线上的相邻柱子组成的图形。由于题目要求矩形中只包含数字…...

was下log4j设置日志不输出问题

was下log4j设置日志不输出问题 WAS 也是用的 commons-logging 日志框架 commons-logging 确定 LogFactory 实现的顺序是 从应用的 META-INF/services/org.apache.commons.logging.LogFactory 中获得 LogFactory 实现从系统环境中获得 org.apache.commons.logging.LogFactory…...

小米14系列, OPPO Find N3安装谷歌服务框架,安装Play商店,Google

10月26号小米发布了新款手机小米14,那么很多大家需求问是否支持谷歌服务框架,是否支持Google Play商店gms。因为毕竟小米公司现在安装的系统是HyperOS澎湃OS。但是我拿到手机之后会发现还是开机初始界面会显示power by android,证明这一点他还是支持安装谷歌,包括最近一段时间发…...

Servlet 与Spring对比!

前言&#xff1a; Spring相关的框架知识&#xff0c;算是目前公司在用的前沿知识了&#xff0c;很重要&#xff01;&#xff01; 那么以Spring为基础的框架有几个&#xff1f; 以Spring为基础的框架包括若干模块&#xff0c;其中主要的有Spring Framework、Spring Boot、Spring…...

javaweb图书馆借阅管理系统设计与实现uv6546wm

目录同行可拿货,招校园代理 ,本人源头供货商功能分析用户管理模块图书管理模块借阅管理模块预约与通知模块统计与报表模块系统设置模块技术实现要点扩展功能&#xff08;可选&#xff09;项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同…...

告别手动抄表!用Python+ADS一键导出TwinCAT3 PLC数据到Excel

工业数据自动化采集实战&#xff1a;PythonADS高效处理TwinCAT3 PLC数据 每次月底报表截止日前&#xff0c;产线工程师小李总要加班到深夜——他需要从12台设备的PLC中手动记录温度、压力和产量数据&#xff0c;再逐个录入Excel制作日报。这种重复劳动不仅耗时耗力&#xff0c;…...

Xinference下载模型卡住不动?从0%到100%的完整排坑指南

写在前面最近在使用Xinference部署模型时&#xff0c;遇到了一个让人抓狂的问题&#xff1a;无论WebUI还是命令行&#xff0c;模型下载的进度始终卡在0%不动&#xff0c;多次重试后还是没变化。更诡异的是&#xff0c;服务日志显示一切正常&#xff0c;但是就是下载不了。经过一…...

十分钟搞定登录原型:用快马AI快速生成全站登录应用前端与后端

今天想和大家分享一个快速搭建全站登录应用原型的经验。最近在做一个新项目&#xff0c;需要验证登录模块的流程设计&#xff0c;传统开发方式至少要花一两天时间配置前后端环境&#xff0c;但这次尝试用InsCode(快马)平台的AI生成功能&#xff0c;十分钟就搞定了可交互的原型。…...

百川2-13B+OpenClaw:学术论文参考文献自动校对系统

百川2-13BOpenClaw&#xff1a;学术论文参考文献自动校对系统 1. 为什么需要参考文献自动化校对 去年写博士论文时&#xff0c;我曾在参考文献格式上栽过跟头。距离截稿还有48小时&#xff0c;导师突然指出我的参考文献列表存在三处格式不一致——有的作者名全大写&#xff0…...

猫抓:网页资源提取工具的全场景应用指南

猫抓&#xff1a;网页资源提取工具的全场景应用指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾遇到这样的困境&#xff1a;精心策划的…...

OFA模型在教育领域的应用:智能试题解析系统

OFA模型在教育领域的应用&#xff1a;智能试题解析系统 让AI看懂试卷&#xff0c;让教学更智能 1. 引言&#xff1a;教育场景的智能化需求 你有没有遇到过这样的情况&#xff1f;批改一堆试卷到深夜&#xff0c;眼睛都快看花了&#xff1b;学生拿着练习题来问&#xff0c;你却…...

原创论文:基于U-Net的肺部CT结节检测系统设计与实现

摘要&#xff1a;肺癌是当前威胁人类健康的重要疾病之一&#xff0c;肺结节作为肺癌早期筛查和诊断的重要影像学表现&#xff0c;其准确检测具有重要意义。CT影像因具有较高的空间分辨率&#xff0c;被广泛应用于肺部疾病检查。然而&#xff0c;传统人工阅片方式存在工作量大、…...

OpenClaw隐私方案:Kimi-VL-A3B-Thinking本地处理医疗影像数据分析

OpenClaw隐私方案&#xff1a;Kimi-VL-A3B-Thinking本地处理医疗影像数据分析 1. 为什么医疗数据必须留在本地&#xff1f; 去年参与一个医学研究项目时&#xff0c;团队需要分析3000多份CT影像。当我们尝试使用某云服务时&#xff0c;合规部门直接叫停——这些包含患者面部特…...

ClusterFuzz终极内存泄漏检测指南:LSAN与UBSAN的完整配置教程

ClusterFuzz终极内存泄漏检测指南&#xff1a;LSAN与UBSAN的完整配置教程 【免费下载链接】clusterfuzz Scalable fuzzing infrastructure. 项目地址: https://gitcode.com/gh_mirrors/cl/clusterfuzz ClusterFuzz是一款强大的可扩展模糊测试基础设施&#xff0c;能够帮…...