由于項(xiàng)目需要,對多個業(yè)務(wù)表單獨(dú)另外建立對應(yīng)的歷史版本記錄表,為了原業(yè)務(wù)表數(shù)據(jù)能原封不動記錄到歷史版本表,需要建立組合主鍵,id+歷史版本號作為主鍵唯一約束(rid+historyVersion)。在實(shí)體上需要設(shè)置為主鍵的字段加上注解,@Id,例如:
/*
* 主鍵-RID
*/
@Id
@Column(name = "RID", length = 36)
private String rid;
這樣會導(dǎo)致,若是該實(shí)體存在父類,那就會啟動報錯,初始化不了,錯誤信息:
does not define an IdClass。
解決辦法是,必須要在類聲名注入@IdClass(UnitHistory.class)。
實(shí)體代碼例子如下:
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;
}