问题描述
||
在我的应用程序中,我需要获取数据库日期(在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>();
}