Как получить sysdate, время и метку времени из базы данных, используя Hibernate - PullRequest
4 голосов
/ 25 мая 2011

В моем приложении мне нужно получить дату базы данных (sysdate в случае БД Oracle) и сравнить ее с датой ввода пользователя (String, преобразованной в java.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. Использование HQL является предпочтительным. Надеюсь, что такое решение доступно.

1 Ответ

1 голос
/ 12 октября 2012

Для тех, кто ищет решение .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>();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...