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;

}

你可能感兴趣的:(spring jpa设置多个主键遇到的小坑)