0

我有一个 JPA 查询:

<named-query name="AUDIT_QUERY">
    <query>
select rx.rxNumber, rx.rxFillStatus.id, tx.rx.rxaaId, tx.id, tx.drugUpc.id, 
tx.compound.id, tx.tpSpecialServiceFee.id,tx.txHistoryDrugUpc.id, 
tx.txHistoryCompound.id, tx.txHistoryTpSpecialServiceFee.id, 
tx.txHistoryRx.id, tx.txNumber,tx.txStatus.id,tx.txAdjudicationStatus.id, 
tx.serviceDate, tx.createDatetime, tx.txQuantity, tx.remainingQuantity, tx.daysSupply, 
tx.ppTotal, tx.tpPaidTotal, tx.adjustedTotal, sig.sigDescriptionStoreLanguage , 
sig.sigDescriptionPatientLanguage , tx.serviceDate
from 
Rx rx JOIN FETCH Tx tx JOIN TxSig sig WHERE rx.rxaaId = tx.rx.rxaaId
and tx.txSig.id = sig.id WHERE 
rx.patient.id = ? 
order by tx.serviceDate desc, tx.txNumber desc,
tx.id desc
    </query>
</named-query>

解析时,休眠抛出错误:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: WHERE near line 1, column 620 [select rx.rxNumber, rx.rxFillStatus.id, tx.rx.rxaaId, tx.id, tx.drugUpc.id, tx.compound.id, tx.tpSpecialServiceFee.id,tx.txHistoryDrugUpc.id, tx.txHistoryCompound.id, tx.txHistoryTpSpecialServiceFee.id, tx.txHistoryRx.id, tx.txNumber,tx.txStatus.id,tx.txAdjudicationStatus.id, tx.serviceDate, tx.createDatetime, tx.txQuantity, tx.remainingQuantity, tx.daysSupply, tx.ppTotal, tx.tpPaidTotal, tx.adjustedTotal, sig.sigDescriptionStoreLanguage , sig.sigDescriptionPatientLanguage , tx.serviceDate from com.sdm.hw.rx.dao.entity.Rx rx JOIN FETCH Tx tx JOIN TxSig sig WHERE rx.rxaaId = tx.rx.rxaaId and tx.txSig.id = sig.id WHERE rx.patient.id = ? order by tx.serviceDate desc, tx.txNumber desc, tx.id desc]

任何帮助将不胜感激。

谢谢, 吉里拉杰

4

1 回答 1

0

要定义连接的条件,使用关键字ON而不是WHERE. 如果我看对了,那你就错了。

SELECT
    rx.rxNumber,
    rx.rxFillStatus.id,
    tx.rx.rxaaId,
    tx.id,
    tx.drugUpc.id,
    tx.compound.id,
    tx.tpSpecialServiceFee.id,
    tx.txHistoryDrugUpc.id,
    tx.txHistoryCompound.id,
    tx.txHistoryTpSpecialServiceFee.id,
    tx.txHistoryRx.id,
    tx.txNumber,
    tx.txStatus.id,
    tx.txAdjudicationStatus.id,
    tx.serviceDate,
    tx.createDatetime,
    tx.txQuantity,
    tx.remainingQuantity,
    tx.daysSupply,
    tx.ppTotal,
    tx.tpPaidTotal,
    tx.adjustedTotal,
    sig.sigDescriptionStoreLanguage,
    sig.sigDescriptionPatientLanguage,
    tx.serviceDate
FROM
    Rx rx
JOIN
FETCH
    Tx tx
JOIN
    TxSig sig
ON
    rx.rxaaId = tx.rx.rxaaId
AND tx.txSig.id = sig.id
WHERE
    rx.patient.id = ?
ORDER BY
    tx.serviceDate DESC,
    tx.txNumber DESC,
    tx.id DESC
于 2013-09-23T10:00:45.353 回答