1

有没有办法在 JPA 中表示最大(和最小)可能的日期而不是特定于数据库的?JPA 实现应该能够根据使用的方言将其转换为正确的值。

如果不是 JPA,Hibernate 特定的解决方案也可以。

编辑

在我们使用的应用程序中,有几个命名查询用于测试日期是否在给定范围内

SELECT ... FROM ... WHERE somedate BETWEEN startdate AND end date

如果范围是开放的(只有开始日期,或者只有结束日期),那么使用最大和最小日期会更容易,只需进行一次比较即可进行不同的查询(这将需要对现有应用程序进行一些更改,我想避免)。

编辑 2

对于不是真正问题的选民:问题是:

可以以与数据库无关的方式查询最大可能日期吗?

编辑 3

该应用程序存储日期java.util.Date如下

@Temporal( TemporalType.TIMESTAMP )
private java.util.Date someDate;
4

3 回答 3

3

我相信(还)没有这样的功能可以以 DB 中立的方式获取最大/最小日期。

我建议您根据要使用的 DBMS,在 Java 和 DB 存储函数中定义相应的常量。

因此,您可以执行以下操作:

Query query = session.createQuery("from Foo where date between :fromDate and :toDate");
query.setParameter("fromDate", DateConstants.MIN_DATE);
query.setParameter("toDate", DateConstants.MAX_DATE);

(我曾经称它为 FOREVER 和 EPOCH :P)

甚至有这样的 HQL(如果您在 DB 中创建了存储函数)

from Foo where date between MaxDate() and MinDate()

于 2012-10-08T10:05:37.463 回答
1

一种选择是定义一个为您提供该信息的数据库函数。为您计划使用的每个数据库供应商定义它。然后使用该函数获取“当前使用的”数据库的最大日期。

于 2012-10-08T17:21:24.660 回答
0

看看在java中获得最大日期值的最佳方法?. 只要您使用 Date 作为 java 类型,使用 JPA 或 Hibernate 应该没有区别。示例:

import java.util.Date;

@Entity
public class Foo {

   @Id
   @GeneratedValue
   long id;

   Date Bar;

   public void  setBar(Date bar) {
      this.bar = bar;
   }

   public Date getBar() {
      return bar;
   }
}

...

// An Entity
Foo foo;

// set minimum date
foo.setBar(new Date(0));

// set maximum date
foo.setBar(new Date(Long.MAX_VALUE));
于 2012-10-08T06:06:04.137 回答