2011-05-25 73 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>(); 
}