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

    技术2022-07-13  88

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

    用hibernate实体类去接收视图数据时,但是视图无主键的时候,@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;

    }

    Processed: 0.013, SQL: 10