2013-09-23 86 views
0

我有一个JPA查询:JPA查询:JOIN问题

<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> 

在解析时,Hibernate会抛出错误:

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] 

任何帮助将不胜感激。

谢谢, Giriraj

回答

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 
+0

感谢您的回复。但JPA 2.0使用WHERE来代替ON。 JPA 2.1草案中提出了ON。 – user1752663

+0

@ user1752663你有这方面的来源吗?我很难相信这一点。如果是这样的话,那么选择的自然加入将是不可能的。你只有一个'WHERE',并且不知道它是否是连接标准或选择。 –