我们在使用JPA对历史问题处理时,会涉及到组合主键的处理。处理的思路如下:

  • 使用@Embeddabel定义一个组合组键ID
  • ID实现SErializable接口
  • 声明一个protected的构造方法
  • 声明带有复合主键属性的构造方法
  • 重写equals和hasCode方法

比如,我有一个使用studentId和courseId两个字段做为主键的复习主键表。

clipboard.png

定义代码如下:

package com.mengyunzhi.english.entity;import javax.persistence.Embeddable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Objects;/*** 学生单词学习节点* 记录学生学习某门课的单词进度* panjie*/
@Entity
@Table(name = "english_student_word_study_node")
public class StudentWordStudyNode {@EmbeddedIdprivate Id id;private Short maxIndex;protected StudentWordStudyNode() {}public StudentWordStudyNode(Id id) {this.id = id;}public Id getId() {return id;}public void setId(Id id) {this.id = id;}public java.lang.Short getMaxIndex() {return maxIndex;}public void setMaxIndex(java.lang.Short maxIndex) {this.maxIndex = maxIndex;}@Embeddablestatic public class Id implements Serializable {protected Integer studentId;protected Integer courseId;protected Id() {}public Id(Integer studentId, Integer courseId) {this.studentId = studentId;this.courseId = courseId;}public Integer getStudentId() {return studentId;}public void setStudentId(Integer studentId) {this.studentId = studentId;}public Integer getCourseId() {return courseId;}public void setCourseId(Integer courseId) {this.courseId = courseId;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (!(o instanceof Id)) return false;Id id = (Id) o;return Objects.equals(studentId, id.studentId) &&Objects.equals(courseId, id.courseId);}@Overridepublic int hashCode() {return Objects.hash(studentId, courseId);}}
}

注意:内部类ID的static不能少。这是由于:我们将主键ID声明为了内部类,而其做为复合组件出现,是需要直接暴露无参的构造函数的,否则将出现:No default constructor for entity

JPA映射组合主键时错误:No default constructor for entity相关推荐

  1. 【6.0】组合主键映射

    通过组件来实现组合主键的步骤: 1.编写组合主键的类,该类必须实现Serializable接口,生成对应的get/set方法:最好实现equals和hashCode方法. public class S ...

  2. db2有主键时默认hash分区_不允许设置db2主键问题的解决

    设置db2主键问题出错的话,应该如何处理呢?下面就教您一个不允许设置db2主键问题的解决方法,希望对您学习设置db2主键方面有所帮助. 将empno设置为主键 db2 => alter tabl ...

  3. oracle change schema,使用pt-online-schema-change修改主键时注意

    使用 pt-online-schema-change 做在线ddl最添加普通索引.列,修改列类型.添加默认值等使用比较常规,但涉及到要修改的是主键时就有点棘手.在我修改线上实例过程中,有这样的需求,不 ...

  4. mysql主键自增 insert_MySQL数据表中有自增长主键时如何插入数据

    https://jingyan.baidu.com/article/fcb5aff7b3a025edaa4a7130.html 设置自增列 phpmyadmin 把A_I选中 就是AUTO_INCRE ...

  5. mysql insert 主键冲突_insert 时防止出现主键冲突错误的方法

    最近几天,产品上线比较多,从内网测试库导出表的部分内容到线上也就比平时频繁多了,这时候可能会出现主键冲突: Error Code : 1062 Duplicate entry '1' for key ...

  6. 主键由数据库mysql 映射native_Hibernate主键生成策略详解

    转载自:http://blog.csdn.net/wanghuan203/article/details/7562395 hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定 ...

  7. 添加mysql组合主键_mysql怎么添加复合主键?

    在mysql中可以在创建表时添加复合主键,其语法规则是"PRIMARY KEY [字段1,字段2,-,字段n]",表示主键由多个字段联合组成. 主键约束即在表中定义一个主键来唯一确 ...

  8. 2.4.3 Mybatis 高级查询, 复杂映射, 返回主键, 动态SQL if, set, foreach, 核心配置文件深入,plugins标签, 多表查询, 嵌套查询

    目录 Mybatis 复杂映射&配置文件深入 一 Mybatis高级查询 1.1 ResutlMap属性 1.2 多条件查询(三种) 1.3 模糊查询 二 Mybatis映射文件深入 2.1 ...

  9. mysql 组合主键索引_mysql 组合索引带主键ID的问题

    场景: mysql 5.7 某表 t_apply_info 上的2个索引,一个组合索引带了 主键字段 ID,另一个是同字段的单列索引 例如: KEY idx_1 (apply_serial_no,id ...

最新文章

  1. Compiere去掉启动时的下面显示的进度条
  2. 基于springboot实现的仓储管理系统
  3. java 一些常用的代码(转载)
  4. 分布式事务之最终一致的Mq实现
  5. 0-1背包问题(C语言)
  6. 论文浅尝 | 使用位置敏感的序列标注联合抽取实体和重叠关系
  7. PHP全栈开发(八):CSS Ⅴ 超链接 style
  8. Use // eslint-disable-next-line to ignore the next line.解决办法
  9. PyGame:Python 游戏编程入门-1
  10. visual studio html插件,实用的 Visual Studio Code 插件
  11. 如何批量查询手机号码归属地
  12. 神马搜索广告怎么投放?神马广告投放产品介绍!
  13. 图像处理:语义分割(sematic segmentation)
  14. 深度学习基础知识点归纳总结
  15. 如何使用FonePaw Video Converter Ultimate将 2D 电影转换为 3D
  16. J-Link 下载程序 接线图
  17. MBA关注:创始人CEO该拿多少工资?
  18. ArrayList删除元素的细则
  19. C#封装的websocket协议类
  20. ON DUPLICATE key update的介绍与使用

热门文章

  1. 2017年云计算行业新动向盘点
  2. 浏览器市场 Chrome 仍占主导地位,IE 继续下降
  3. ASP.NET 5 WebApi 返回 HttpResponseMessage
  4. 趣文:舌尖上的程序猿
  5. 使用Log4j进行日志操作
  6. 2021奥斯汀 Pwn2Own黑客大赛落幕,Master of Pwn 诞生
  7. 几个安卓 app 暴露超1亿用户的数据
  8. CVE-2020-11945 Squid未授权整数溢出分析
  9. (二)Java数组的使用
  10. iOS tableview嵌套collectionview