如何在休眠中执行日期操作

ama*_*ntu 14 time hibernate hql date

我想使用hibernate HQL执行数据时间操作.

我想添加和减去两个日期以及我想从特定日期减去1年或1个月.

如何在hibernate中使用HQL?

z5h*_*z5h 9

你需要创建自己的方言.类似于以下内容:

public class MyDialect extends MySQLInnoDBDialect{
      public myDialect() {
      super();
      registerFunction("date_add_interval", new SQLFunctionTemplate(Hibernate.DATE, "date_add(?1, INTERVAL ?2 ?3)"));
      }
    }
Run Code Online (Sandbox Code Playgroud)

  • 太棒了...现在你如何在代码中使用它...如果可能的话,一个小样本 (4认同)

小智 6

请参阅 在HQL中执行日期/时间数学? 举个例子.

要使用自定义sql,您必须编写自己的hibernate方言并注册:

registerFunction("weekday", 
  new SQLFunctionTemplate(Hibernate.INTEGER, "to_char(?1,'D')") );
Run Code Online (Sandbox Code Playgroud)


Fre*_*lam 5

这是 Hibernate 中的一个未解决的问题。从 Hibernate 3.3 开始,没有标准方法可以纯粹在 HQL 中处理日期比较:

https://hibernate.atlassian.net/browse/HHH-2434

Hibernate 4.3 提供了在 HQL 中访问日期/时间的函数,它们是:

current_timestamp() , current_date() , current_time()
Run Code Online (Sandbox Code Playgroud)

算术运算可以通过以下方式管理:

SECOND(...) , MINUTE(...) , HOUR(...) , DAY(...) , MONTH(...) , YEAR(...)
Run Code Online (Sandbox Code Playgroud)


小智 5

在 Hibernate/MySQL(至少)中,您可以与 Unix 时间戳相互转换。由于unix时间戳是一个整数,您可以向其添加整数秒。

FROM_UNIXTIME(UNIX_TIMESTAMP(date)+ (allowedTimeWindow*86400)) as deadline
Run Code Online (Sandbox Code Playgroud)

它有局限性,但比上述方法容易得多。