你需要创建自己的方言.类似于以下内容:
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)
小智 6
请参阅 在HQL中执行日期/时间数学? 举个例子.
要使用自定义sql,您必须编写自己的hibernate方言并注册:
registerFunction("weekday",
new SQLFunctionTemplate(Hibernate.INTEGER, "to_char(?1,'D')") );
Run Code Online (Sandbox Code Playgroud)
这是 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)
它有局限性,但比上述方法容易得多。
| 归档时间: |
|
| 查看次数: |
65959 次 |
| 最近记录: |