在我的应用程序中,我需要获取数据库日期(如果是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是首选。希望有这样的解决方案。
答案 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>();
}