HQL в предложении для сопоставления компонентов

#java #hibernate

#java #переход в спящий режим

Вопрос:

Я выполняю простой запрос select HQL

 from CertObjRel where certificatePrimary in (:certificatePrimaryList)  
where certificatePrimaryList is a java arrayList of certificatePrimary
  

Базовый класс CertificatePrimary:

 class CertificatePrimary implements Serializable{

    //private int primaryId;
    private String certificateId;
    private Short trsSequenceNbr;

    public String getCertificateId() {
        return certificateId;
    }

    public Short getTrsSequenceNbr() {
        return trsSequenceNbr;
    }

    public void setCertificateId(String certificateId) {
        this.certificateId = certificateId;
    }

    public void setTrsSequenceNbr(Short trsSequenceNbr) {
        this.trsSequenceNbr = trsSequenceNbr;
    }

}
  

CertObjRelMapping содержит CertificatePrimary в качестве компонента

CertObjRel.hbm.xml

 <component name="certificatePrimary" class="com.csc.exceed.certificate.domain.CertificatePrimary">
    <property name="certificateId" type="java.lang.String" column="CERT_ID" length="36" not-null="true"/> 
    <property name="trsSequenceNbr" type="java.lang.Short" column="CERT_TRS_SEQ_NBR" />
</component>
  

Я получаю следующую ошибку

 DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=(;RT_TRS_SEQ_NBR) in (;<values>, DRIVER=3.50.152
  

Эта ошибка генерируется после привязки параметров.

Ответ №1:

Насколько мне известно, HQL in clouse не поддерживает компоненты. Итак, измените свой запрос, как показано ниже, чтобы использовать certificateId внутри CertificatePrimary , который является строкой.

from CertObjRel where certificatePrimary.certificateId in (:certificatePrimaryIdList)

certificatePrimaryIdList должен быть string список идентификаторов, разделенных комой, который формируется путем повторения, certificatePrimaryList например 'A','B','C' .

Комментарии:

1. Мне нужно получить запись для комбинации CertificateID и trsSequenceNbr. Это было причиной создания component certificatePrimary. Есть ли какая-либо другая работа, поскольку даже SQL В предложении поддерживает многоколоночную поддержку только для определенной конкретной базы данных.