如何使用休眠方式从数据库获取系统日期,时间和时间戳

问题描述

|| 在我的应用程序中,我需要获取数据库日期(在Oracle DB中为
sysdate
),并将其与用户输入日期(date1ѭ转换为ѭ2compare)进行比较。从这个论坛上,我获得了以下代码,这些代码对于Oracle方言很有帮助。
public Date getDate() {
        Session session = getHibernateTemplate().getSessionFactory().openSession();
        sqlQuery query = session.createsqlQuery(\"select sysdate as mydate from dual\");
        query.addScalar(\"mydate\",Hibernate.TIMESTAMP);
        return (Date) query.uniqueResult();
    }
并且从此链接获得了以下方法,该方法将映射文件与公式一起使用。
<property name=\"currentDate\" formula=\"(select sysdate from dual)\"/>
同样,这是特定于Oracle的。我认为使用以后的方法性能更友好,因为我们可以从同一会话中获取它,即无需为了获取日期而打开另一个会话。 我正在寻找一种通用的解决方案,以使用Hibernate从任何DBMS获取日期,时间和时间戳。首选使用HQL。希望有这样的解决方案。     

解决方法

对于那些正在寻找.NET / C#解决方案的人,这对我有用:
// this works only with Oracle
public DateTime DbTimeStamp(ISession session)
{
    // Sample returned value = \"12-OCT-11 01.05.54.365134000 AM -07:00\"
    string sql = \"SELECT SYSTIMESTAMP FROM DUAL\";
    ISQLQuery query = session.CreateSQLQuery(sql)
    .AddScalar(\"SYSTIMESTAMP\",NHibernate.NHibernateUtil.DateTime);
    return query.UniqueResult<DateTime>();
}