IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Jpa联合主键 -> 正文阅读

[大数据]Jpa联合主键

项目背景:SpringBoot+jpa+h2数据库。
本菜鸟接了个需求,在数据库里增加一些数据。sql语句发过来了,如下所示:

INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('BH', 'ADDITIONAL_INFO', 'exam_report_additional_info.html', 'sa', '20140204 15:43:55', 'A');
INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('BH', 'CONTENT', 'exam_report_content.html', 'sa', '20140204 15:43:55', 'A');
INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('BH', 'FOOTER', 'exam_report_footer.html', 'sa', '20140204 15:43:55', 'A');
INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('BH', 'LAYOUT', 'exam_report_overlay.html', 'sa', '20140204 15:43:55', 'A');
INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('HCH', 'ADDITIONAL_INFO', 'exam_report_additional_info.html', 'syncdata', '20190122 12:05:38', 'A');
INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('HCH', 'CONTENT', 'exam_report_content.html', 'syncdata', '20190122 12:05:38', 'A');
INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('HCH', 'FOOTER', 'exam_report_footer.html', 'syncdata', '20190122 12:05:38', 'A');
INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('HCH', 'LAYOUT', 'exam_report_overlay.html', 'syncdata', '20190122 12:05:38', 'A');
INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('KH', 'ADDITIONAL_INFO', 'exam_report_additional_info.html', 'sa', '20140204 15:43:55', 'A');
INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('KH', 'CONTENT', 'exam_report_content.html', 'sa', '20140204 15:43:55', 'A');
INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('KH', 'FOOTER', 'exam_report_footer.html', 'sa', '20140204 15:43:55', 'A');
INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('KH', 'LAYOUT', 'exam_report_overlay.html', 'sa', '20140204 15:43:55', 'A');
INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('QEH', 'ADDITIONAL_INFO', 'exam_report_additional_info.html', 'sa', '20140204 15:43:55', 'A');
INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('QEH', 'CONTENT', 'exam_report_content.html', 'sa', '20140204 15:43:55', 'A');
INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('QEH', 'FOOTER', 'exam_report_footer.html', 'sa', '20140204 15:43:55', 'A');
INSERT INTO st_report_template(hosp_cde, section, path, last_upd_usr, last_upd_dt, status_cde) VALUES('QEH', 'LAYOUT', 'exam_report_overlay.html', 'sa', '20140204 15:43:55', 'A');

打眼一看,简单。cv一下,运行,报错:主键冲突。
再仔细看看,我把第一列当成主键,这么多重复的???!!!惊呆了,怎么办?
百度一番,使用jpa联合索引。
仔细看上面的sql语句:第一列很多重复的,但是第一列+第二列是不是就不重复了?怎么实现呢?上代码:

第一步,先写一个作为联合主键的实体类,把这两列放进来
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class StReportTemplatePK implements Serializable {

    private String hospCde;

    private String section;
}

第二步,写真正的实体类

import hk.org.ha.ris.primary.key.system.StReportTemplatePK;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.io.Serializable;

@Data
@Entity
//注意这个注解!!!!这个注解把联合主键的类放进来
@IdClass(StReportTemplatePK.class)
@Table(name = "st_report_template")
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class StReportTemplate implements Serializable {
    @Id//这个注解很重要,是联合主键其中的一个
    @Column(name = "hosp_cde", nullable = false,unique = false)
    private String hospCde;

    @Id//这个注解也很重要,是联合主键的另外一个
    @Column(name = "section", nullable = false)
    private String section;

    @Column(name = "path", nullable = false)
    private String path;

    @Column(name = "lastUpdUsr", nullable = false)
    private String lastUpdUsr;

    @Column(name = "lastUpdDt", nullable = false)
    private String lastUpdDt;

    @Column(name = "statusCde", nullable = false)
    private String statusCde;
}

注意看,这里的@Id注解已经不止一个,就是包含的这两列。

第三步,写repository
@Repository
public interface StReportTemplateRepository extends JpaRepository<StReportTemplate, StReportTemplatePK>, JpaSpecificationExecutor<StReportTemplate> {
}

完成。

注意坑:

命名一定要写规范,项目越来越大的情况下,前缀名都相同,很容易导错,错的多了血压都上来了。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-07 10:53:46  更:2021-09-07 10:55:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:44:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码