это работает, но я получил org.springframework.orm.jpa.JpaSystemException: более одной строки с данным идентификатором была найдена ошибка - PullRequest
0 голосов
/ 14 марта 2019

мой класс сущности указан ниже: -

public class ExportOrderInfo implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@Column(name = "CURRENT_ORDER_NUMBER")
private Integer currentOrderNumber;

@Id
@Column(name = "ORG_CODE")
private Integer orgCode;

@Id
@Column(name = "STIR_CD")
private Integer stirCd;

@Id
@Column(name = "EXPIRE_DATE")
private Date expireDate;

@Column(name = "ENTERPRISE_CODE", insertable = false, updatable = false)
private Integer enterpriseCode;

@Column(name = "ORG_NAME", insertable = false, updatable = false)
private String orgName;

@Column(name = "TOTAL_PREV", insertable = false, updatable = false)
private Double totalPrev;

@Column(name = "ENTERPRISE_NAME", insertable = false, updatable = false)
private String enterpriseName;

@Column(name = "GG_EMP_CODE", insertable = false, updatable = false)
private Integer ggEmpCode;

@Column(name = "GG_FIRST_NAME", insertable = false, updatable = false)
private String ggFirstName;

@Column(name = "GG_LAST_NAME", insertable = false, updatable = false)
private String ggLastName;

@Column(name = "CNTN_EMP_CODE", insertable = false, updatable = false)
private Integer cntnEmpCode;

@Column(name = "CNTN_FIRST_NAME", insertable = false, updatable = false)
private String cntnFirstName;

@Column(name = "CNTN_LAST_NAME", insertable = false, updatable = false)
private String cntnLastName;

@Column(name = "GVP_EMP_CODE", insertable = false, updatable = false)
private Integer gvpEmpCode;

@Column(name = "GVP_FIRST_NAME", insertable = false, updatable = false)
private String gvpFirstName;

@Column(name = "GVP_LAST_NAME", insertable = false, updatable = false)
private String gvpLastName;

@Column(name = "RVP_EMP_CODE", insertable = false, updatable = false)
private Integer rvpEmpCode;

@Column(name = "RVP_FIRST_NAME", insertable = false, updatable = false)
private String rvpFirstName;

@Column(name = "RVP_LAST_NAME", insertable = false, updatable = false)
private String rvpLastName;

@Column(name = "AVP_EMP_CODE", insertable = false, updatable = false)
private Integer avpEmpCode;

@Column(name = "AVP_FIRST_NAME", insertable = false, updatable = false)
private String avpFirstName;

@Column(name = "AVP_LAST_NAME", insertable = false, updatable = false)
private String avpLastName;

@Column(name = "AM_EMP_CODE", insertable = false, updatable = false)
private Integer amEmpCode;

@Column(name = "AM_FIRST_NAME", insertable = false, updatable = false)
private String amFirstName;

@Column(name = "AM_LAST_NAME", insertable = false, updatable = false)
private String amLastName;

@Column(name = "TM_EMP_CODE", insertable = false, updatable = false)
private Integer tmEmpCode;

@Column(name = "TM_FIRST_NAME", insertable = false, updatable = false)
private String tmFirstName;

@Column(name = "TM_LAST_NAME", insertable = false, updatable = false)
private String tmLastName;

@Column(name = "AE_EMP_CODE", insertable = false, updatable = false)
private Integer aeEmpCode;

@Column(name = "AE_FIRST_NAME", insertable = false, updatable = false)
private String aeFirstName;

@Column(name = "AE_LAST_NAME", insertable = false, updatable = false)
private String aeLastName;

@Column(name = "MULTI_YEAR_FLAG", insertable = false, updatable = false)
private String multiYearFlag;

@Column(name = "MULTI_YEAR_IN", insertable = false, updatable = false)
private Integer multiYearIn;

@Column(name = "MULTI_YEAR_LENGTH", insertable = false, updatable = false)
private Integer multYearLength;

@Column(name = "OPTY_ID", insertable = false, updatable = false)
private String optyId;

@Column(name = "OPTY_NAME", insertable = false, updatable = false)
private String optyName;

@Column(name = "OVERALL_RG", insertable = false, updatable = false)
private String overallRg;

@Column(name = "ITEM_STATUS", insertable = false, updatable = false)
private String itemStatus;

@Column(name = "EBS_ACCT_ID", insertable = false, updatable = false)
private String ebsAcctId;

@Column(name = "FST_YR_CLIENT_FLG", insertable = false, updatable = false)
private String firstYrClientFlag;

@Column(name = "PRODUCT_LOB", insertable = false, updatable = false)
private String productLob;

@OneToOne
@NotFound(action = NotFoundAction.IGNORE)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@JoinColumn(name = "CURRENT_ORDER_NUMBER")
@JoinColumn(name = "EXPIRE_DATE")
@JoinColumn(name = "ORG_CODE")
@JoinColumn(name = "STIR_CD")
private ExportOrderDetailInfo orderDetail;

@OneToOne
@NotFound(action = NotFoundAction.IGNORE)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@JoinColumn(name = "OPTY_ID", referencedColumnName = "OPTY_ID")
private OrderDownload orderDownload;


@Override
public boolean equals(Object o) {

    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }
    ExportOrderInfo that = (ExportOrderInfo) o;
    if (!currentOrderNumber.equals(that.currentOrderNumber)) {
        return false;
    }
    if (!orgCode.equals(that.orgCode)) {
        return false;
    }
    if (!Objects.equals(stirCd, that.stirCd)) {
        return false;
    }
    return Objects.equals(expireDate, that.expireDate);
}

@Override
public int hashCode() {

    int result = currentOrderNumber.hashCode();
    result = 31 * result + orgCode.hashCode();
    result = 31 * result + (stirCd != null ? stirCd.hashCode() : 0);
    result = 31 * result + (expireDate != null ? expireDate.hashCode() : 0);
    return result;
}

}

public class OrderDownload implements Serializable {

private static final long serialVersionUID = 3838097352824067548L;

@Id
@Column(name = "UD_ID")
private String udId;

@Column(name = "DWN_REQ_DT")
private Date dwnReqDt;

@Column(name = "DWN_STATUS")
private String dwnStatus;

@Column(name = "OPTY_ID")
private String optyId;

@Override
public boolean equals(Object o) {

    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }
    OrderDownload that = (OrderDownload) o;
    return udId.equals(that.udId);
}

@Override
public int hashCode() {

    return udId.hashCode();
}

}

и в классе спецификации есть toPredicate (), как указано ниже: -

public Predicate toPredicate(Root<ExportOrderInfo> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder builder) {

    if(beginningOfQuarter != null && endOfQuarter != null){
        criteriaQuery.distinct(true);
        root.join("orderDetail", JoinType.LEFT);
        root.join("orderDownload", JoinType.INNER);
        return builder.and(builder.equal(root.<String>get(randomColumnName), valueToSearchFor) , builder.isNotNull(root.get("optyId")));
    }else{
        criteriaQuery.distinct(true);
        root.fetch("orderDetail", JoinType.LEFT);
        root.fetch("orderDownload", JoinType.LEFT);
        return builder.and(builder.equal(root.<String>get(randomColumnName), valueToSearchFor));
    }
}

}

Я получаю его работы, но я получил org.springframework.orm.jpa.JpaSystemException: найдено более одной строки с данным идентификатором: OrderDownload (udId = null, dwnReqDt = null, dwnStatus = null, optyId = 1 -7RV24-105)

...