如何使用hibernate从数据库获取系统日期、时间和时间戳

发布于 2024-11-09 07:20:30 字数 1016 浏览 0 评论 0原文

在我的应用程序中,我需要获取数据库日期(如果是 Oracle DB,则为 sysdate)并将其与用户输入日期(String 转换为 java.util.Date)进行比较。 util.Date)。从这个论坛我得到了以下代码,这对这种情况有帮助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。希望有这样的解决方案。

In my application I need to get database date(sysdate in case of Oracle DB) and compare it with user input date (String converted to java.util.Date). From this forum I got the following code which helps in the case of Oracle dialect.

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

And from this link got the following method which uses mapping file with formula.

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

Again this is specific to Oracle. I think using later method is more performance friendly, because we can get it from the same session, i.e no need of opening another session just for getting date.

I am looking for a generic solution to get date, time and timestamp from any DBMS using Hibernate. Using HQL is the preferred. Hope such a solution is available.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

紫轩蝶泪 2024-11-16 07:20:30

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

For those who are looking for .NET /C# solution, here is what worked for me:

// 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>();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文