2012-10-08 29 views
1

有沒有一種方法可以表示JPA中的最大(和最小)可能日期,而不需要特定於數據庫? JPA實現應該能夠根據使用的方言將其轉換爲正確的值。JPA中的最大可能日期

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

編輯

在我們使用的應用程序有多個命名查詢該測試,如果日期是在給定的範圍內

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

如果範圍是開放的(僅開始日期,或僅enddate),使用最大和最小日期來進行不同的查詢只需一次比較會更容易(這需要對現有應用程序進行一些我希望避免的更改)。

編輯2

對於不是一個真正的問題選民:問題是:

它可以查詢在一個數據庫無關的方式最大可能的日期?

編輯3

的應用程序存儲日期爲java.util.Date如下

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

對近距離投票的評論可能會有用。不恰當?重複?如果它是重複的,那麼提到一個鏈接就不錯。 – Matteo

+0

我不是那個投棄權票或投票結束的人,但你爲什麼需要這個信息,你會在真實的應用程序中使用它嗎? –

+0

@LuiggiMendoza我編輯了問題並附有說明 – Matteo

回答

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); 

(我用永遠調用和EPOCH:P)

,甚至有HQL像這樣(如果你有創建數據庫存儲功能)

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

+0

好的,我會有一個函數返回最大值根據數據庫:根據當前的數據庫我返回相應的日期(如果數據庫不知道/支持我返回像9999的東西) – Matteo

0

Best way to get maximum Date value in 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)); 
+1

不是真的,「Long.MAX_VALUE」對於許多DB來說太大了。 – Matteo

+0

真的嗎?如果你試圖保存它,你會得到什麼? –

+0

僅僅因爲如果它例如映射到定義爲以微秒計數的8字節的時間戳,它將會變大1000(日期(長值)以毫秒計)。但即使我們除以1000,它仍然可以用於PostreSQL,但Oracle上的時間戳不能大於日期(最大值爲9999)。 – Matteo

1

一種選擇是定義數據庫的功能,讓你的信息。爲您打算使用的每個數據庫供應商定義它。然後使用該函數獲取「當前使用」數據庫的最大日期。

+0

也是一個好主意,我不知道它是否會更容易或不是每個產品常量。 – Matteo

+0

我認爲這取決於你如何定義簡單。 –

+0

準確地說:-)在任何情況下,我都注意到使用Date和JPA並不是一個真正理想的世界(對於MySQL來說,處理小於一秒的事務的DB特定的東西太多了,最小值,...) – Matteo