Hibernate注解规范的文档中提供了三种方法:
     1. 将组件类注解为@Embeddable,并将组件的属性注解为@Id;
     2. 将组件的属性注解为@Embeddable;
     3. 将类注解为@IdClass,并将该实体中所有主键属性注解为@Id。
这里,我采用的是第三种方法——@IdClass,下面就是具体的代码,大家一块讨论一下。

首先,需要说明的是,采用@IdClass方式,需要根据所有的主键属性,建立一个主键类,该主键类包含所有的主键,而且,作为主键类,需要满足以下要求:
    1. 主键类必须实现序列化接口(implements Serializable);
    2. 主键类必须有默认的public无参数的构造方法;

3. 主键类必须覆盖equals和hashCode方法。

CREATE TABLE `bbpgbmx` (
`bbpgbid` INT(11) NOT NULL,
`pgbbh` VARCHAR(50) NOT NULL COMMENT '编号',
`mxxh` INT(11) NOT NULL COMMENT '明细序号',
`xh` VARCHAR(10) NOT NULL COMMENT '序号',
`nr` VARCHAR(100) NULL DEFAULT NULL COMMENT '内容',
`fs` INT(11) NULL DEFAULT NULL COMMENT '分数',
PRIMARY KEY (`bbpgbid`, `pgbbh`, `mxxh`, `xh`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;import com.fasterxml.jackson.annotation.JsonIgnoreProperties;@Entity
@Table(name = "bbpgbmx")
@JsonIgnoreProperties(ignoreUnknown=true)
public class Bbpgbmx extends ReponseModel{@EmbeddedIdprivate BbpgbmxId id;private String nr;private Integer fs;public Bbpgbmx() {super();}public Bbpgbmx(Long bbpgbid, String pgbbh, Integer mxxh, String xh) {this.id =new BbpgbmxId(bbpgbid,pgbbh,mxxh,xh);}public BbpgbmxId getId() {return id;}public void setId(BbpgbmxId id) {this.id = id;}public String getNr() {return nr;}public void setNr(String nr) {this.nr = nr;}public Integer getFs() {return fs;}public void setFs(Integer fs) {this.fs = fs;}}
import java.io.Serializable;import javax.persistence.Embeddable;import com.fasterxml.jackson.annotation.JsonIgnoreProperties;/*** * @Description:     Hibernate注解规范的文档中提供了三种方法:1. 将组件类注解为@Embeddable,并将组件的属性注解为@Id;2. 将组件的属性注解为@Embeddable;3. 将类注解为@IdClass,并将该实体中所有主键属性注解为@Id。
这里,我采用的是第三种方法——@IdClass,下面就是具体的代码,大家一块讨论一下。首先,需要说明的是,采用@IdClass方式,需要根据所有的主键属性,建立一个主键类,该主键类包含所有的主键,而且,作为主键类,需要满足以下要求:1. 主键类必须实现序列化接口(implements Serializable);2. 主键类必须有默认的public无参数的构造方法;3. 主键类必须覆盖equals和hashCode方法。*/@JsonIgnoreProperties(ignoreUnknown=true)
@Embeddable  //embeddable: 可嵌入的
public class BbpgbmxId implements Serializable{private Long bbpgbid;private String pgbbh;private Integer mxxh;private String xh;/** * 无参数的public构造方法,必须要有 */ public BbpgbmxId() {super();}public BbpgbmxId(Long bbpgbid, String pgbbh, Integer mxxh, String xh) {this.bbpgbid = bbpgbid;this.pgbbh = pgbbh;this.mxxh = mxxh;this.xh = xh;}public Long getBbpgbid() {return bbpgbid;}public void setBbpgbid(Long bbpgbid) {this.bbpgbid = bbpgbid;}public String getPgbbh() {return pgbbh;}public void setPgbbh(String pgbbh) {this.pgbbh = pgbbh;}public Integer getMxxh() {return mxxh;}public void setMxxh(Integer mxxh) {this.mxxh = mxxh;}public String getXh() {return xh;}public void setXh(String xh) {this.xh = xh;}/** * 覆盖hashCode方法,必须要有 */  @Override  public int hashCode() {  final int PRIME = 31;  int result = 1;  result = PRIME * result + (bbpgbid == null ? 0 : bbpgbid.hashCode());  result = PRIME * result + (pgbbh == null ? 0 : pgbbh.hashCode());  result = PRIME * result + (mxxh == null ? 0 : mxxh.hashCode());  result = PRIME * result + (xh == null ? 0 : xh.hashCode());  return result;  }/** * 覆盖equals方法,必须要有 */  @Overridepublic boolean equals(Object obj) {if(obj == null) return false;if(getClass() != obj.getClass())return false;final BbpgbmxId other = (BbpgbmxId) obj;if(bbpgbid == null){if(other.bbpgbid != null){return false;}}else if(!bbpgbid.equals(other.bbpgbid)){return false;}if(pgbbh == null){if(other.pgbbh != null){return false;}}else if(!pgbbh.equals(other.pgbbh)){return false;}if(mxxh == null){if(other.mxxh != null){return false;}}else if(!mxxh.equals(other.mxxh)){return false;}if(xh == null){if(other.xh != null){return false;}}else if(!xh.equals(other.xh)){return false;}return true;}
}

spring 使用注解来定义联合主键相关推荐

  1. Java实体类设置联合主键_javahibernate使用注解来定义联合主键

    java hibernate使用注解来定义联合主键 下面使用hibernate的API中说明的三种方式来定义主键,主要使用Annotation来定义hibernate中的联合主键 下面取至hibern ...

  2. java联合主键_Hibernate注解映射联合主键的三种主要方式

    今天在做项目的时候,一个中间表没有主键,所有在创建实体的时候也未加组件,结果报以下错误: org.springframework.beans.factory.BeanCreationException ...

  3. Java实体类设置联合主键_Hibernate 注解方式设置联合主键

    使用 Annotation 设置联合主键有三种方式: 1. 方法一 主键类:将联合主键的字段单独放在类中,该类实现 java.io.Serializable 接口,并重写 equals 和 hasco ...

  4. java 联合主键 注解_Hibernate的联合主键注解方式

    Hibernate联合主键注解方式,即是Hibernate中某一张表出现多个字段联合为唯一主键的情况.这时候就可以使用Hibernate的联合主键来操作.以用户表为例子,userId+userName ...

  5. java联合主键_hibernate联合主键映射(注解版)

    1.联合主键的映射三种写法 实体类: package com.zhouwei.po; import javax.persistence.Entity; import javax.persistence ...

  6. 用注解给映射视图的类创建联合主键

    视图类: import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.IdClass; ...

  7. Hibernate JPA-实体类定义联合主键@IdClass、@EmbeddedId注解

    文章目录 一.复合主键@idClass.@Embeddable @idClass @Embeddable 网上实例demo 二.参考 一.复合主键@idClass.@Embeddable 可参照官方文 ...

  8. mysql 联合主键_Mysql 创建联合主键

    Mysql 创建联合主键 2008年01月11日 星期五 下午 5:21 使用primary key (fieldlist) 比如: create table mytable ( aa int, bb ...

  9. MySql基础篇---003 SQL之DDL、DML、DCL使用篇:创建和管理表 ,数据处理之增删改,MySQL数据类型精讲 ,约束:联合主键

    第10章_创建和管理表 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数据的第一步.只有正确地 ...

最新文章

  1. Datawhale浙大分享(附投票结果)
  2. 交替性注意力_如何从心理学角度解释“专注力”,“专注力”对一个人的影响?...
  3. 【核心API开发】Spark入门教程[3]
  4. Sony如何启动微型计算机,索尼笔记本怎么进入bios 索尼VAIO笔记本进入bios技巧
  5. mysql开启远程访问
  6. 64位有符号与无符号类型的整数
  7. 外挂学习之路(2)--- 老生常谈“基地址”
  8. WTMPlus 1.1 发布
  9. 《Effective Java》读书笔记 - 5.泛型
  10. java里的初始化块_[转载] Java 语言中的实例初始化块 ( IIB) 详解
  11. mysql避免死锁的方法
  12. python语言-Python 条件语句
  13. JVM笔记7:类加载器
  14. iOS开发之权限判断(这里只说相册的权限判断status一直是PHAuthorizationStatusNotDetermined问题)
  15. AI教程视频 - 零基础玩转illustrator科研绘图-内容介绍-目录
  16. Win10x64-WDM设备驱动开发入门 - 第六章 VMware-Win10x64+WDK10+VS2015/2019环境搭建与双机调试
  17. css 文本和div垂直居中方法汇总
  18. Petalinux2019.1详细安装
  19. CT计算机组成及其特点,浅析CT图像的特点及常用扫描方式
  20. QT中双击mdiArea区域打开文件(监听双击事件)

热门文章

  1. 背光板受欢迎用户的原因
  2. java后端与前端的交互_前端和后端数据交互的基本知识和常见方式
  3. 浪费粮食之思——爱的太自私
  4. Android---Chip
  5. mayavi可视化kitti
  6. 我不想一辈子和代码打交道
  7. 2019宁夏12月计算机二级报名,宁夏2019年12月计算机等级报名要注意这些
  8. form表单的使用,iframe内嵌标签
  9. UCOSII学习笔录
  10. Java版得力API接口文档实现之接口加密