如何使用hibernate从数据库获取sysdate,time和timestamp

时间:2011-05-25 08:56:02

标签: database hibernate datetime java-ee

在我的应用程序中,我需要获取数据库日期(如果是Oracle DB,则为sysdate)并将其与用户输入日期( String转换为java.util.Date )。从this forum我得到以下代码,这有助于 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();
    }

this link得到以下方法,该方法使用带公式的映射文件。

<property name="currentDate" formula="(select sysdate from dual)"/>

这再次特定于Oracle。我认为使用后面的方法更加性能友好,因为我们可以从同一个会话中获取它,即不需要为获取日期而打开另一个会话。

我正在寻找一种通用的解决方案,可以使用Hibernate从任何DBMS获取日期,时间和时间戳。使用HQL是首选。希望有这样的解决方案。

1 个答案:

答案 0 :(得分:1)

对于那些正在寻找.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>();
}