2011-04-20 69 views
2

我使用Oracle 11g和JPA 2.0(JBoss 6.0.0中的休眠)。 我需要,代表了一個實體的時間範圍,所以我所定義的那些字段:JPA 2.0和Oracle與TemporalType.TIME

@Temporal(TemporalType.TIME) 
private Date startTime; 

@Temporal(TemporalType.TIME) 
private Date endTime; 

所生成的表使用兩個日期字段,這是確定自從Oracle沒有表示只是在部分時間一類型。

從db中加載實體時,只加載時間部分(該字段包含java.sql.Time)。 我已經看到,如果我在字段中設置完整的日期+時間,日期部分將被持久化到數據庫。

有沒有辦法確保日期部分不會持久保存到分貝?

回答

2

您可以編寫刪除日期組件的setter方法。快速和骯髒的例子:

public void setStartTime(Date startTime) 
{ 
    this.startTime = new Time(startTime.getTime() % 86400000L); 
} 

雖然你會更好使用Joda Time做你的日期/時間計算(見this question)。我沒有測試是爲了確保它是正確的,但它應該告訴你的基本思路:

public void setStartTime(Date startTime) 
{ 
    this.startTime = new Time(LocalTime.fromDateFields(startTime).millisOfDay().get()); 
} 
+1

謝謝,我用您的解決方案(但使用日曆剝離的日期部分,以避免對喬達的依賴時間,此刻)。我想知道是否有辦法告訴JPA照顧這部分或類似的東西。 – 2011-04-20 15:53:34