Hibernate HQL查询导致SQLGrammarException

时间:2013-01-26 00:53:01

标签: java mysql hibernate sqlexception

执行附带的代码时,我收到一个SQLGrammarException,没有进一步的解释。我正在对mysql数据库执行此代码。有人能理解这个查询有什么问题吗?

    public PatientId getPatientByAccount(String account_) {
    Session session = null;
    PatientId patient = null;
    try {

        session = HibernateUtils.beginTransaction("emscribedx");
        session.beginTransaction();
        String queryString = "from PatientId where acct = :acct";
        Query query = session.createQuery(queryString);
        query.setString("acct", account_);
        Object queryResult = query.uniqueResult();
        patient = (PatientId)queryResult;
        session.getTransaction().commit();

    } catch (HibernateException e_) {
        System.out.println("Problem getting patientId for acct=" + account_
                + " " + e_.toString());
        NTEVENT_LOG.error("Problem getting patientId for acct=" + account_
                + " " + e_.getStackTrace());
    } finally {
        if (session != null && session.isOpen()) {
            try {
                HibernateUtils.closeSessions();
            } catch (HibernateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    return patient;

}

如果有帮助,查询将生成以下sql:

    select
    patientid0_.pid as pid7_,
    patientid0_.aprdrg as aprdrg7_,
    patientid0_.fid as fid7_,
    patientid0_.acct as acct7_,
    patientid0_.create_date as create5_7_,
    patientid0_.mr as mr7_,
    patientid0_.sex as sex7_,
    patientid0_.race as race7_,
    patientid0_.age as age7_,
    patientid0_.AdmitDate as AdmitDate7_,
    patientid0_.admittime as admittime7_,
    patientid0_.DischargeDate as Dischar12_7_,
    patientid0_.held as held7_,
    patientid0_.drgweight as drgweight7_,
    patientid0_.drgtext as drgtext7_,
    patientid0_.encodersystem as encoder16_7_,
    patientid0_.mdc as mdc7_,
    patientid0_.illnessSeverity as illness18_7_,
    patientid0_.mortalityRisk as mortali19_7_,
    patientid0_.eminfo as eminfo7_,
    patientid0_.emtime as emtime7_,
    patientid0_.Dischargetime as Dischar22_7_,
    patientid0_.Birthdate as Birthdate7_,
    patientid0_.transferfrom as transfe24_7_,
    patientid0_.DischargeDisp as Dischar25_7_,
    patientid0_.transferto as transferto7_,
    patientid0_.patientType as patient27_7_,
    patientid0_.admitReason as admitRe28_7_,
    patientid0_.DischargeNum as Dischar29_7_,
    patientid0_.admitSource as admitSo30_7_,
    patientid0_.admitType as admitType7_,
    patientid0_.prevstatus as prevstatus7_,
    patientid0_.patientLast as patient33_7_,
    patientid0_.patientFirst as patient34_7_,
    patientid0_.patientMiddle as patient35_7_,
    patientid0_.drg as drg7_,
    patientid0_.assignTo as assignTo7_,
    patientid0_.groupid as groupid7_,
    patientid0_.newDocs as newDocs7_,
    patientid0_.assignOrder as assignO40_7_,
    patientid0_.serviceType as service41_7_,
    patientid0_.dischargeDispFlag as dischar42_7_,
    patientid0_.PendingInfo1 as Pending43_7_,
    patientid0_.MaritalStatus as Marital44_7_,
    patientid0_.FinancialClass as Financi45_7_,
    patientid0_.MedicalService as Medical46_7_,
    patientid0_.assign_date as assign47_7_,
    patientid0_.assignby as assignby7_,
    patientid0_.ADTID as ADTID7_,
    patientid0_.notes as notes7_,
    patientid0_.CycleBeginDate as CycleBe51_7_,
    patientid0_.CycleEndDate as CycleEn52_7_,
    patientid0_.grouper as grouper7_,
    patientid0_.EstReimbursement as EstReim54_7_,
    patientid0_.initialdrg as initialdrg7_,
    patientid0_.product as product7_,
    patientid0_.billtype as billtype7_,
    patientid0_.PendingInfo2 as Pending58_7_,
    patientid0_.pendinginfo as pending59_7_,
    patientid0_.location as location7_,
    patientid0_.status as status7_ 
from
    emscribedx.patientid patientid0_ 
where
    patientid0_.acct=?

1 个答案:

答案 0 :(得分:2)

事实证明,数据库已被更改,因此hibernate使用的基础模型具有不在数据库中的列。这导致hibernate抛出sqlgrammarException。不幸的是,Hibernate异常并不像对数据库进行直接jdbc调用那样具有信息性。