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

480

被折叠的 条评论
为什么被折叠?



