用hibernate实体类去接收视图数据时,但是视图无主键

当使用Hibernate实体类处理无主键的视图数据时,可能出现数据缺失或重复问题。解决方法是通过创建联合主键确保数据唯一性。具体步骤包括:1) 创建一个@Embeddable的联合主键类,包含唯一字段;2) 在实体类中引用联合主键,并用@Id注解。这样可以避免数据查询异常。

用hibernate实体类去接收视图数据时,但是视图无主键的时候,@id 注释在不是唯一键的字段上时候。查数据会出现缺数据,数据重复的问题,这时候就需要设计联合主键去确保数据的唯一性。

给视图创建联合主键,具体操作如下:

1)创建一个包含联合主键的类,并在类上注释@Embeddable

@Embeddable
@Data
public class BuSqpzCompositeId implements Serializable {
private static final long serialVersionUID = -3304319243957837925L;
/**
* 事业部分配头寸头ID
*/
@Column(name = “POSITION_EMPOWER_HEADER_ID”, length = 255)
@Size(max = 255)
String positionEmpowerHeaderId;

/**
 * 事业部编码
 */
@Column(name = "EMPOWER_DEPARTMENT_CODE", length = 255)
@Size(max = 255)
private String empowerDepartmentCode;

/**
 *文件类型
 */
@Column(name = "DOCUMENT_TYPE")
private String documentType;

/**
*重写equals方法和hashCode方法
*/
@Override
public boolean equals(Object o) {
if(o instanceof BuSqpzCompositeId){
BuSqpzCompositeId key = (BuSqpzCompositeId)o ;
if(this.positionEmpowerHeaderId == key.positionEmpowerHeaderId && this.empowerDepartmentCode.equals(key.empowerDepartmentCode) && this.documentType==key.documentType){
return true ;
}
}
return false ;
}

@Override
public int hashCode() {
    return this.empowerDepartmentCode.hashCode();
}

}
2)在entity类中引用联合主键,并在引用上注解@Id

@Data
@Entity
@Table(name = “NCRM_BU_SQPZ_V”)
@Generated(value = “com.yonyou.ocm.util.codegenerator.CodeGenerator”)
public class NcrmBuSqpzV {
@Id
private BuSqpzCompositeId userRoleCompositeId;
/**
* 事业部分配头寸头ID
/
/
@Id
@Column(name = “POSITION_EMPOWER_HEADER_ID”, length = 255)
@Size(max = 255)
private String positionEmpowerHeaderId;*/

/**
 * 共享事业部编码
 */
@Column(name = "SHARE_DEPARTMENT_CODE", length = 255)
@Size(max = 255)
private String shareDepartmentCode;

/**
 * 共享事业部名称
 */
@Column(name = "SHARE_DEPARTMENT_NAME", length = 255)
@Size(max = 255)
private String shareDepartmentName;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值