由于项目需要,对多个业务表单独另外建立对应的历史版本记录表,为了原业务表数据能原封不动记录到历史版本表,需要建立组合主键,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;
}