spring jpa设置多个主键遇到的小坑

由于项目需要,对多个业务表单独另外建立对应的历史版本记录表,为了原业务表数据能原封不动记录到历史版本表,需要建立组合主键,id+历史版本号作为主键唯一约束(rid+historyVersion)。在实体上需要设置为主键的字段加上注解,@Id,例如:

/*

* 主键-RID

*/

@Id

@Column(name = "RID", length = 36)

private String rid;


这样会导致,若是该实体存在父类,那就会启动报错,初始化不了,错误信息:

does not define an IdClass。

解决办法是,必须要在类声名注入@IdClass(UnitHistory.class)。

实体代码例子如下:

package com.southgis.officeHouse.entity;

import java.io.Serializable;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.IdClass;

import javax.persistence.Index;

import javax.persistence.Table;

import lombok.Data;

import lombok.EqualsAndHashCode;

import lombok.NoArgsConstructor;

/**

*

* @author Administrator

* 单位基本信息历史版本表

*/

@Data

@EqualsAndHashCode(callSuper=false)

@NoArgsConstructor

@Entity

@IdClass(UnitHistory.class)

@Table(name = "UNIT_HISTORY",indexes={

@Index(name="inx_unitHistory_orgid",columnList="ORGID")})

public class UnitHistory extends UnitBase implements Serializable

{

private static final long serialVersionUID = -4466904221026481006L;

/*

* 主键-RID

*/

@Id

@Column(name = "RID", length = 36)

private String rid;

/*

* 主键-历史版本号,保存格式年份_版本号,例如2018_1

*/

@Id

@Column(name = "HISTORY_VERSION",length=36)

private String historyVersion;

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 窗间梅熟落蒂,墙下笋成出林。连雨不知春去,一晴方觉夏深。 尊敬的家长朋友们,你们辛苦了!拿到成绩的那一刻...
    峡溪飞瀑阅读 1,486评论 0 0
  • 《将陪温随启》 花圆印月彩蝶飞, 美草青节属婉抚。 顺奇中盘估山杉, 革无独戏忽悄渠。 咆则危虚空人睡, 倾城献吻...
    春城怡景阅读 3,342评论 6 18
  • 渲染引擎 渲染引擎的职责是……渲染,也就是把请求的内容显示到浏览器屏幕上。 默认情况下渲染引擎可以显示HTML,X...
    caikunhai阅读 4,314评论 0 5
  • 周五的《我是歌手》第四季歌王争霸赛结束了,我是第二天看重播的,因为冠军人选没什么悬念,外加看直播不能跳过冗长的广告...
    遇上音阶阅读 4,134评论 2 1

友情链接更多精彩内容