2013-09-23 2 views
0

Я имею в JPA Query: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> 

В процессе анализа гибернации Выдает Error:

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] 

Любая помощь будет оценена.

Спасибо, Гирираджа

ответ

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. ON предлагается в проекте JPA 2.1. – user1752663

+0

@ user1752663 У вас есть источник этого? Мне трудно поверить в это. Если бы это было так естественное соединение с отбором, было бы невозможно. У вас будет только один «WHERE» и не может определить, являются ли они критериями присоединения или выбором. –

Смежные вопросы