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

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

/*

* 主键-RID

*/

@Id

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

private String rid;

 

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

does not define an IdClass。

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

实体代码例子如下:

package com.southgis.officeHouse.entity;

import java.io.Serializable;
import javax.persistence.Id;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 
 * @author Administrator
 *	组合主键
 */
@Data
public class HistoryPK implements Serializable
{
	private static final long serialVersionUID = 1L;
	
	/*
	 * 主键-RID
	 */
	private String rid;
	
	/*
	 * 主键-历史版本号,保存格式年份_版本号,例如2018_1
	 */
	private String historyVersion;
	
}
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(HistoryPK.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;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值