如何结合 java.util.Calendar 和 HQL 之间

Posted

技术标签:

【中文标题】如何结合 java.util.Calendar 和 HQL 之间【英文标题】:how to combine java.util.Calendar and HQL Between 【发布时间】:2009-11-16 11:32:34 【问题描述】:

我正在尝试获取在两个日期之间借出的书籍。 由于数据有可爱的 2009 显示为 109 功能,我决定使用日历。

但是,在编写 HQL 时,我遇到了 BETWEEN 不会将日历视为日期的问题。 现在我想知道是否有解决方案。 还是我在课堂上坚持编写函数来获取小时、日、月、年并写一个很长的 where 语句?

query = session.createQuery("from model.Book book where book.loaned between :earliest and :latest");

问题是 between 仅适用于日期对象。并借用了 Java.Util.Calendar。

【问题讨论】:

【参考方案1】:

您可以使用Calendar.getTimeCalendar 获得Date - 这对您有帮助吗?如果您不小心,您可能会遇到时区问题,诚然...数据库中存储的日期到底是怎样的?

【讨论】:

您可以在 java 类中使用 getTime,但不能在 HQL 中使用。 好的,我很困惑你是如何调用它的......我以为你正在将参数传递给查询。您能否在问题中提供一些示例代码以使其更清晰?我怀疑我可能无法提供帮助,但希望其他人可以。 query = session.createQuery("from model.Book book where book.loaned between :earliest and :latest")。问题是 between 仅适用于日期对象。并借用了 Java.Util.Calendar。可能还有另一种方法可以在这两个日期之间获取书籍,但我还没有找到。 请将该代码编辑到您的问题中 - 它会让每个人都更容易阅读该问题。但是,我建议 book.loaned 应该是 java.util.Date;您可以添加一个额外的(非持久性)属性以将其作为日历获取。 你可以重写它以使用更少/更大,例如: 其中 book.loaned >= :earliest 和 book.loaned

以上是关于如何结合 java.util.Calendar 和 HQL 之间的主要内容,如果未能解决你的问题,请参考以下文章

java.util.Calendar.get* 和 java.util.Calendar.set* 被阻塞

最佳实践:如何通过 JDBC 检查 SQL.DATE 中的特定 java.util.Calendar/Date?

如何在 java.util.Calendar 字段上映射 IceFaces <ice:selectInputDate> 组件?

java.util.Date 和 java.util.Calendar 是不是已弃用?

Java.util.Calendar.getInstance()方法实例

java.util.Date和java.util.Calendar及相关类