spring 使用注解来定义联合主键
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 使用注解来定义联合主键相关推荐
- Java实体类设置联合主键_javahibernate使用注解来定义联合主键
java hibernate使用注解来定义联合主键 下面使用hibernate的API中说明的三种方式来定义主键,主要使用Annotation来定义hibernate中的联合主键 下面取至hibern ...
- java联合主键_Hibernate注解映射联合主键的三种主要方式
今天在做项目的时候,一个中间表没有主键,所有在创建实体的时候也未加组件,结果报以下错误: org.springframework.beans.factory.BeanCreationException ...
- Java实体类设置联合主键_Hibernate 注解方式设置联合主键
使用 Annotation 设置联合主键有三种方式: 1. 方法一 主键类:将联合主键的字段单独放在类中,该类实现 java.io.Serializable 接口,并重写 equals 和 hasco ...
- java 联合主键 注解_Hibernate的联合主键注解方式
Hibernate联合主键注解方式,即是Hibernate中某一张表出现多个字段联合为唯一主键的情况.这时候就可以使用Hibernate的联合主键来操作.以用户表为例子,userId+userName ...
- java联合主键_hibernate联合主键映射(注解版)
1.联合主键的映射三种写法 实体类: package com.zhouwei.po; import javax.persistence.Entity; import javax.persistence ...
- 用注解给映射视图的类创建联合主键
视图类: import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.IdClass; ...
- Hibernate JPA-实体类定义联合主键@IdClass、@EmbeddedId注解
文章目录 一.复合主键@idClass.@Embeddable @idClass @Embeddable 网上实例demo 二.参考 一.复合主键@idClass.@Embeddable 可参照官方文 ...
- mysql 联合主键_Mysql 创建联合主键
Mysql 创建联合主键 2008年01月11日 星期五 下午 5:21 使用primary key (fieldlist) 比如: create table mytable ( aa int, bb ...
- MySql基础篇---003 SQL之DDL、DML、DCL使用篇:创建和管理表 ,数据处理之增删改,MySQL数据类型精讲 ,约束:联合主键
第10章_创建和管理表 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数据的第一步.只有正确地 ...
最新文章
- Datawhale浙大分享(附投票结果)
- 交替性注意力_如何从心理学角度解释“专注力”,“专注力”对一个人的影响?...
- 【核心API开发】Spark入门教程[3]
- Sony如何启动微型计算机,索尼笔记本怎么进入bios 索尼VAIO笔记本进入bios技巧
- mysql开启远程访问
- 64位有符号与无符号类型的整数
- 外挂学习之路(2)--- 老生常谈“基地址”
- WTMPlus 1.1 发布
- 《Effective Java》读书笔记 - 5.泛型
- java里的初始化块_[转载] Java 语言中的实例初始化块 ( IIB) 详解
- mysql避免死锁的方法
- python语言-Python 条件语句
- JVM笔记7:类加载器
- iOS开发之权限判断(这里只说相册的权限判断status一直是PHAuthorizationStatusNotDetermined问题)
- AI教程视频 - 零基础玩转illustrator科研绘图-内容介绍-目录
- Win10x64-WDM设备驱动开发入门 - 第六章 VMware-Win10x64+WDK10+VS2015/2019环境搭建与双机调试
- css 文本和div垂直居中方法汇总
- Petalinux2019.1详细安装
- CT计算机组成及其特点,浅析CT图像的特点及常用扫描方式
- QT中双击mdiArea区域打开文件(监听双击事件)