When executing the enclosed code, I receive a SQLGrammarException with no further explanation. I am executing this code against a mysql database. Can someone understand what is wrong with this query?
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;
}
If it helps, the query is generating the following 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=?
It turns out that the database had been changed so that the underlying model that was used by hibernate had columns that were not in the database. This caused hibernate to throw the sqlgrammarException. Unfortunately, Hibernate exceptions are not as informative as those that occur with a straight jdbc call to the database.