Hibernatu musíte dát vědět, s jakou db má tu čest a to tak, že mu docpete konkrétní dialect. Hlavní předek je abstraktní třída org.hibernate.dialect.Dialect. Obsahuje metodu getCurrentTimestampSelectString(), kterou implementují konkrétní dialecty. V této metodě se nachází náš hledaný JDBC select.
Teď k samotnému řešení.
public Calendar getSysDate() {
Calendar sysDate = Calendar.getInstance();
if (sessionFactory instanceof SessionFactoryImplementor) {
Session session = SessionFactoryUtils.getNewSession(sessionFactory);
Dialect dialect = ((SessionFactoryImplementor) sessionFactory).getDialect();
String queryString;
try {
queryString = dialect.getCurrentTimestampSelectString();
} catch (UnsupportedOperationException un) {
return sysDate;
}
Query query = session.createSQLQuery(queryString);
Object result = query.uniqueResult();
if (result != null && result instanceof Date) {
sysDate.setTime((Date) result);
}
}
return sysDate;
}
V případě, že pro daný dialect není přepsána metoda getCurrentTimestampSelectString(), vyhodí se vyjímka UnsupportedOperationException a metoda getSysDate() vrací Calendar.getInstance(). Určitě by jste to tak neměli nechat a měli by jste si přepsat váš potřebný dialect a implementovat výše uvedenou metodu :).
Žádné komentáře:
Okomentovat