2011-05-25 61 views
4

在我的應用程序需要得到數據庫的日期(sysdate Oracle數據庫中的情況下),並將其與用戶輸入的日期比較(String轉換爲java.util.Date)獲得SYSDATE,從數據庫的時間和時間戳。從this forum我得到了以下代碼,這有助於在Oracle方言的情況下。如何使用Hibernate

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是首選。希望這樣的解決方案可用。

+0

我不認爲這個問題是艱難的。 37意見,但沒有答案! – WarFox 2011-06-06 05:48:40

+0

顯然它是 - 我正在尋找相同的東西,但結束使用SQLQuery方法和sysdate,因爲我發現沒有其他選擇。 – simon 2012-09-07 07:48:56

回答

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>(); 
}