回答
查看 Performing Date/Time Math In HQL? 为例。
要使用自定义的SQL你必须写一个自己的休眠的方言和注册:
registerFunction("weekday",
new SQLFunctionTemplate(Hibernate.INTEGER, "to_char(?1,'D')"));
您需要创建自己的方言。类似以下内容:
public class MyDialect extends MySQLInnoDBDialect{
public myDialect() {
super();
registerFunction("date_add_interval", new SQLFunctionTemplate(Hibernate.DATE, "date_add(?1, INTERVAL ?2 ?3)"));
}
}
这是Hibernate中的一个公开问题。由于休眠3.3的有在HQL纯粹的处理日期比较没有标准的方式:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2434
的Hibernate 4.3提供的功能来访问日期/时间的HQL它们是:
current_timestamp() , current_date() , current_time()
算术运算能
SECOND(...) , MINUTE(...) , HOUR(...) , DAY(...) , MONTH(...) , YEAR(...)
免责声明:由被管理我一个Java新手
我能够在Hibernate 3.5.3的HQL语句中使用current_date() >= fromDate AND dateadd(day, -1, getdate()) <= toDate
,而不用注册任何函数。
在休眠/ MySQL中(至少) 您可以转换为Unix时间戳或从Unix时间戳转换。由于unix时间戳是一个整数,所以你可以给它添加一个整数秒。
FROM_UNIXTIME(UNIX_TIMESTAMP(date)+ (allowedTimeWindow*86400)) as deadline
它有局限性,但比上面的方法容易得多。与方言方法用于
用法样品JPA +休眠4.3.1 + MySQL的5
公共类SampleMySQL5InnoDBDialect延伸org.hibernate.dialect.MySQL5InnoDBDialect {
public SampleMySQL5InnoDBDialect() {
super();
registerFunction("date_sub_days", new SQLFunctionTemplate(StandardBasicTypes.DATE, "date_sub(?1, interval ?2 day)"));
}
然后用于与映射注释你的类:
@NamedQuery(name = "SampleEntity.getSampleEntitiesForGapOverlapCalculations", query = "from SampleEntity as se where "
+ "((se.toDate between :startDate and :endDate) or (date_sub_days(se.toDate, se.duration) between :startDate and :endDate)) order by se.toDate asc, se.duration desc")
SampleEntity有toDate java.sql类型的字段。日期和持续时间整数字段(持续时间以天计),我们计算FROM日期= TODATE - 持续时间和选择具有FROM日期或TODATE所有实体间隔[内部的startDate ,endDate]。
Hibernate4.3提供本地函数访问日期/时间戳记,并对其执行arithmatic操作
Here是链接到什么表情也能在HQL中使用的文档。 其中很少的我正在提的是: 要访问的日期/时间:
current_date(), current_time(), and current_timestamp()
算术运算可以通过以下来完成。这些功能需要时间作为输入:
second(...), minute(...), hour(...), day(...), month(...), and year(...)
人们可以通过
current_timestamp() - dateInstance
得到的HQL绝对的区别在哪里dateInstance可以定义
@Column(name = "updated_at")
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date updatedAt;
结果为0.1秒。因此,对于1秒的绝对差异,上面的表达式将给出结果为10
所以查询看起来像:
select t from Table t where (current_timestamp() - updatedAt)>600
- 1. 如何使用spring mvc在休眠模板上执行关系操作
- 2. 在休眠条件下IN操作
- 3. 休眠和日期
- 4. 在查询中执行日期操作
- 5. 休眠配料操作按预期
- 6. 在休眠模式下使用视图
- 7. 如何比较休眠中的日期
- 8. 如何在春季休眠中反序列化日期格式?
- 9. 休眠当前日期不起作用
- 10. 休眠 - 日期不能正常工作
- 11. iPhone/Safari:如何在睡眠模式下继续执行javascript?
- 12. 休眠日期文字
- 13. JPL休眠日期数学
- 14. 休眠HQL和日期
- 15. 默认日期值休眠
- 16. jQuery插件来执行日期操作
- 17. 休眠 - 从模式
- 18. 休眠操作异常
- 19. 休眠 - 更新操作:
- 20. 如何在休眠模式下使用setParameter
- 21. 为什么我的EmbeddedId在休眠模式下不工作?
- 22. 在休眠模式下访问模式间表和关系
- 23. 在休眠和mysql映射日期
- 24. R - 如何执行跨年日期操作?
- 25. 休眠 - 把操作放在事务
- 26. 用“IN”操作员在休眠
- 27. MongoDB C# - 如何执行以下操作
- 28. 我应该如何克服这种Java的休眠错误在只读模式下不允许写操作
- 29. 休眠级联操作不起作用
- 30. 执行单一操作的OO模式
是..我看到的链接,但在Hibernate中没有给出规定正确添加或减少日期。 假设如果我想在一年之前使用current_timestamp()HQL的日期。应该做什么,因为没有额外的功能。 有没有更好的办法? 谢谢。 – amar4kintu 2009-06-24 11:55:34
你好,在下面的链接中,我找到了为sql server创建自定义hibernate方言的详细描述。这是在链接的最后回答中解释的。希望它能帮助别人。 https://forums.hibernate.org/viewtopic.php?f=1&t=995494 – amar4kintu 2009-06-25 11:31:08