#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 В предложении поддерживает многоколоночную поддержку только для определенной конкретной базы данных.