这次有个需求,在数据库建表时发现,主键为复合主键:

这里采用@IdClass注解的方式来实现复合主键;

思路
编写一个复合主键类UserProjectMultiKeysClass;
通过@IdClass注释在实体中标注复合主键;
可以通过EntityManager获取数据,或者是直接在Repository 里写方法;

package com.hiocs.cron.entity;import java.io.Serializable;/*** @ Author     :johnbarrowman65* @ Date       :Created in 16:32 2019/4/8* @ Description:EnteredInfo  联合主键*/
public class UserProjectMultiKeysClass implements Serializable {private static final long serialVersionUID = 1L;private String bmbbm;// private String xh;// private String xxdm;// public UserProjectMultiKeysClass() {}public UserProjectMultiKeysClass(String bmbbm, String xh, String xxdm) {this.bmbbm = bmbbm;this.xh = xh;this.xxdm = xxdm;}public String getBmbbm() {return bmbbm;}public void setBmbbm(String bmbbm) {this.bmbbm = bmbbm;}public String getXh() {return xh;}public void setXh(String xh) {this.xh = xh;}public String getXxdm() {return xxdm;}public void setXxdm(String xxdm) {this.xxdm = xxdm;}//  ***重写hashCode与equals方法***@Overridepublic int hashCode() {final int PRIME = 31;int result = 1;result = PRIME * result + ((bmbbm == null) ? 0 : bmbbm.hashCode());result = PRIME * result + ((xh == null) ? 0 : xh.hashCode());result = PRIME * result + ((xxdm == null) ? 0 : xxdm.hashCode());return result;}@Overridepublic boolean equals(Object obj){if(this == obj){return true;}if(obj == null){return false;}if(getClass() != obj.getClass()){return false;}final UserProjectMultiKeysClass other = (UserProjectMultiKeysClass)obj;if(bmbbm == null){if(other.bmbbm != null){return false;}}else if(!bmbbm.equals(other.bmbbm)){return false;}if(xh == null){if(other.xh != null){return false;}}else if(!xh.equals(other.xh)){return false;}if(xxdm == null){if(other.xxdm != null){return false;}}else if(!xxdm.equals(other.xxdm)){return false;}return true;}
}

注意: 
复合主键类必须满足: 
1. 实现Serializable接口; 
2. 有默认的public无参数的构造方法; 
3. 重写equals和hashCode方法。equals方法用于判断两个对象是否相同,EntityManger通过find方法来查找Entity时,是根据equals的返回值来判断的。hashCode方法返回当前对象的哈希码;

实体类

package com.hiocs.cron.entity;import javax.persistence.*;
import java.io.Serializable;/*** 报名信息实体类* @author*/
@Entity
@Table(name = "XX_ENTERED_INFO")
@IdClass(UserProjectMultiKeysClass.class)
public class EnteredInfo implements Serializable {private static final long serialVersionUID = 1L;private String bmbbm;// private String xh;// private String gbzydm;// private String batch_number;private String xxdm;// private String xm;// private int xb_id;// private int mzdm_id;// private int zzmm_id;// private String jg;//private int zjlxId; //private String spzh;// private String spdz;// private String dwmc;private String dwdz;private String dwsszj;private String education;private String lxdz_city;private String lxdz_town;private String lxdz;// private String lxrxm;// private String lxrgx;// private String lxrdh;// private String mobile;private Boolean sfcyjnzs;private int ly_id;// private Long bmsj;// private int state_id;// private String updated;private String memo;// private int sfebss;//private int sfsfzhf;//private String sfzf;//@Overridepublic String toString() {return "EnteredInfo{" +"bmbbm='" + bmbbm + '\'' +", xh='" + xh + '\'' +", gbzydm='" + gbzydm + '\'' +", batch_number='" + batch_number + '\'' +", xxdm='" + xxdm + '\'' +", xm='" + xm + '\'' +", xb_id=" + xb_id +", mzdm_id=" + mzdm_id +", zzmm_id=" + zzmm_id +", jg='" + jg + '\'' +", zjlxId=" + zjlxId +", spzh='" + spzh + '\'' +", spdz='" + spdz + '\'' +", dwmc='" + dwmc + '\'' +", dwdz='" + dwdz + '\'' +", dwsszj='" + dwsszj + '\'' +", education='" + education + '\'' +", lxdz_city='" + lxdz_city + '\'' +", lxdz_town='" + lxdz_town + '\'' +", lxdz='" + lxdz + '\'' +", lxrxm='" + lxrxm + '\'' +", lxrgx='" + lxrgx + '\'' +", lxrdh='" + lxrdh + '\'' +", mobile='" + mobile + '\'' +", sfcyjnzs=" + sfcyjnzs +", ly_id=" + ly_id +", bmsj=" + bmsj +", state_id=" + state_id +", updated='" + updated + '\'' +", memo='" + memo + '\'' +", sfebss=" + sfebss +", sfsfzhf=" + sfsfzhf +", sfzf='" + sfzf + '\'' +'}';}public String getUpdated() {return updated;}public void setUpdated(String updated) {this.updated = updated;}public String getSfzf() {return sfzf;}public void setSfzf(String sfzf) {this.sfzf = sfzf;}public int getSfebss() {return sfebss;}public void setSfebss(int sfebss) {this.sfebss = sfebss;}public int getSfsfzhf() {return sfsfzhf;}public void setSfsfzhf(int sfsfzhf) {this.sfsfzhf = sfsfzhf;}@Idpublic String getBmbbm() {return bmbbm;}public void setBmbbm(String bmbbm) {this.bmbbm = bmbbm;}@Idpublic String getXh() {return xh;}public void setXh(String xh) {this.xh = xh;}public String getGbzydm() {return gbzydm;}public void setGbzydm(String gbzydm) {this.gbzydm = gbzydm;}public static long getSerialVersionUID() {return serialVersionUID;}public String getBatch_number() {return batch_number;}public void setBatch_number(String batch_number) {this.batch_number = batch_number;}@Idpublic String getXxdm() {return xxdm;}public void setXxdm(String xxdm) {this.xxdm = xxdm;}public String getXm() {return xm;}public void setXm(String xm) {this.xm = xm;}public int getXb_id() {return xb_id;}public void setXb_id(int xb_id) {this.xb_id = xb_id;}public int getMzdm_id() {return mzdm_id;}public void setMzdm_id(int mzdm_id) {this.mzdm_id = mzdm_id;}public int getZzmm_id() {return zzmm_id;}public void setZzmm_id(int zzmm_id) {this.zzmm_id = zzmm_id;}public String getJg() {return jg;}public void setJg(String jg) {this.jg = jg;}public int getZjlxId() {return zjlxId;}public void setZjlxId(int zjlxId) {this.zjlxId = zjlxId;}public String getSpzh() {return spzh;}public void setSpzh(String spzh) {this.spzh = spzh;}public String getSpdz() {return spdz;}public void setSpdz(String spdz) {this.spdz = spdz;}public String getDwmc() {return dwmc;}public void setDwmc(String dwmc) {this.dwmc = dwmc;}public String getDwdz() {return dwdz;}public void setDwdz(String dwdz) {this.dwdz = dwdz;}public String getDwsszj() {return dwsszj;}public void setDwsszj(String dwsszj) {this.dwsszj = dwsszj;}public String getEducation() {return education;}public void setEducation(String education) {this.education = education;}public String getLxdz_city() {return lxdz_city;}public void setLxdz_city(String lxdz_city) {this.lxdz_city = lxdz_city;}public String getLxdz_town() {return lxdz_town;}public void setLxdz_town(String lxdz_town) {this.lxdz_town = lxdz_town;}public String getLxdz() {return lxdz;}public void setLxdz(String lxdz) {this.lxdz = lxdz;}public String getLxrxm() {return lxrxm;}public void setLxrxm(String lxrxm) {this.lxrxm = lxrxm;}public String getLxrgx() {return lxrgx;}public void setLxrgx(String lxrgx) {this.lxrgx = lxrgx;}public String getLxrdh() {return lxrdh;}public void setLxrdh(String lxrdh) {this.lxrdh = lxrdh;}public String getMobile() {return mobile;}public void setMobile(String mobile) {this.mobile = mobile;}public Boolean getSfcyjnzs() {return sfcyjnzs;}public void setSfcyjnzs(Boolean sfcyjnzs) {this.sfcyjnzs = sfcyjnzs;}public int getLy_id() {return ly_id;}public void setLy_id(int ly_id) {this.ly_id = ly_id;}public Long getBmsj() {return bmsj;}public void setBmsj(Long bmsj) {this.bmsj = bmsj;}public int getState_id() {return state_id;}public void setState_id(int state_id) {this.state_id = state_id;}public String getMemo() {return memo;}public void setMemo(String memo) {this.memo = memo;}
}

注意: 
1. @IdClass标注用于标注实体所使用主键规则的类; 
2. 在实体中同时标注主键的属性,比如这段代码中的userId,projectId以及timestamp ;

Spring Data Jpa 复合主键相关推荐

  1. java 复合主键,Spring Data Jpa 复合主键的实现

    前言 这次大创有个需求,在数据库建表时发现,user表与project表的关系表 user_project的主键为复合主键: CREATE TABLE user_project( user_id IN ...

  2. SpringData JPA复合主键

    一.JPA和复合主键的简介        JPA全称Java Persistence API,是一组用于将数据存入数据库的类和方法的集合.JPA通过JDK5.0注解或XML描述对象-关系表的映射关系, ...

  3. springboot jpa 复合主键 联合主键

    为什么80%的码农都做不了架构师?>>>    在开发中,数据库中定义了一个复合主键,这时候在映射不稍微处理下会有一点问题.什么does not define an IdClass错 ...

  4. JPA复合主键的使用

    背景 人员信息和组信息的关联表中使用的USER_ID_和GROUP_ID_的联合主键,在维护组人员信息的时候,发现JPA打印的SQL只根据USER_ID_作为条件来更新数据,当B组存在zhangsan ...

  5. 使用Spring Data JPA进行分页和排序

    通过代码示例学习使用Spring Data JPA进行分页和排序 . 了解如何使用Springs PagingAndSortingRepository接口获取分页和排序结果. 1概述 在处理大量数据时 ...

  6. JPA之使用复合主键

    文章目录 1. 目标 2. 数据库设计 3. Entity 定义 4. 使用 5. 源码 1. 目标 在设计数据库表的时候,有时候不想定义没有意义的Id作为主键,就可以使用复合主键.这个时候使用JPA ...

  7. Spring Boot 、Spring Data JPA、Hibernate集成

    ###什么是JPA JPA是用于管理Java EE 和Java SE环境中的持久化,以及对象/关系映射的JAVA API 最新规范为"JSR 338:Java Persistence 2.1 ...

  8. Spring Data JPA 之 @Entity 的常用注解

    6 Spring Data JPA 之 @Entity 的常用注解 前⼏课时介绍了 Repository 的⽤法,其中经常会提到"实体类"(即前⾯的User 类),它是对我们数据库 ...

  9. 【SpringBoot框架篇】11.Spring Data Jpa实战

    文章目录 1.简介 1.1.JPA 1.2.Spring Data Jpa 1.3.Hibernate 1.4.Jpa.Spring Data Jpa.Hibernate三者之间的关系 2.引入依赖 ...

  10. Spring Boot整合Spring Data JPA操作数据

    一. Sping Data JPA 简介 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 J ...

最新文章

  1. Django框架搭建
  2. 【机器学习】数据挖掘算法——关联规则(一),相关概念,评价指标
  3. java 方法委托托管_Java Web托管选项流程图
  4. sp | sp格式的空间矢量对象及其函数方法简介
  5. 强悍的 vim —— g s 替换区别
  6. Android Studio解决:Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed
  7. [置顶]       javascript中的数组对象以及json学习笔记
  8. 在线音乐网站网站开发项目 ,第一篇
  9. 数据通信技术初级工程师证题库
  10. 主机炸鸡?Z世代主机市场终究是肯德基的?
  11. 8.6 百度首页编写-导航栏
  12. 计算机课拔线头检讨书,乱接电线检讨书
  13. 【postgres】源码结构
  14. 如何进行有效的计划管理?
  15. 比较正确的 iPhone7/7+ 的进入DFU的方法是这样的
  16. 4 看电影--贪心算法
  17. Python|判断字符串是否符合日期要求
  18. 并发编程-25 高并发处理手段之消息队列思路 + 应用拆分思路 + 应用限流思路
  19. python中的格式化输出
  20. 梅科尔工作室—罗森——鸿蒙笔记2

热门文章

  1. 一本通1486:【例题1】黑暗城堡(最小路径树计数)
  2. 视网膜屏幕和高清视网膜屏幕
  3. 为什么很多人上了研究生变得不快乐了?
  4. Excel2003和Excel2007对下拉选择和下拉级联选择的操作以及java程序的调用
  5. 微信开发工具,字体如何调整的大一点?
  6. 只有一个源视频的Deepfakes简介
  7. linux裸设备读写,Linux裸设备管理学习笔记
  8. 【微信小程序云开发 云数据库 云函数 云存储】
  9. 保龄球计分程序java_保龄球计分——java代码实现
  10. 如何判断channel是否已经关闭