2012-03-29 85 views
4

我需要在堅持時間戳的做法上達成共識,特別是在使用java.util.Date時與使用long時相比使用弊端&。將日期或長期的時間戳記字段保留?

範圍本討論的:

  • 性能
  • 查詢靈活性(例如日期範圍)
  • 在編碼和查詢
  • 便攜性(例如遷移到其它DB)
任何危害

自我簡介: 我認爲自己是JPA的初學者,曾經參與過一次一段時間,直到現在還不能將其應用到生產級項目中。在我目前的項目中,我承諾通過JPA調用來使用ObjectDB(嵌入式)。

回答

5

下面的類演示了用於在JPA持續時間戳3種可能的方法:

@Entity 
public class Timestamps { 
    private java.sql.Timestamp ts1; 
    private @Temporal(TemporalType.TIMESTAMP) java.util.Date ts2; 
    private long ts3; 
    : 
} 

關於性能和內存消耗,TS3是一個比較有效的。 (在ObjectDB數據庫瀏覽器,報表等中)ts3可能不如ts1和ts2使用方便。

基本查詢,如日期範圍檢索,都支持所有這三種,但在查詢中提取日期和時間部分(YEAR,MONTH等)不支持ts3。

所有這些形式都是可移植的。

ts1和ts2實際上是等效的。

更多細節請參見ObjectDB manual

+0

我猜日期贏得便利性和可讀性,其中涉及查詢。 Long可能適用於原始數據應用,例如科學的,醫學的,其中查詢可能罕見或者在後期收集時被調用。報告生成。 – 2012-04-02 06:53:13

0

你應該知道關於的java.sql.Timestamp的事實,在使用它之前:

有在做擴展可實例 類,並添加值組件Java平臺庫,一些類。例如,java.sql.Timestamp 擴展了java.util.Date並添加了一個納秒字段。 Timestamp的等號實現 確實違反了對稱性,並且如果 時間戳和日期對象在相同的集合中使用或以其他方式混合,則會導致不穩定的行爲。 Timestamp類有一個免責聲明,告誡程序員對 混合日期和時間戳。儘管只要你將它們分開,你就不會遇到麻煩,但沒有什麼可以阻止你將它們混合在一起,並且產生的錯誤可能很難調試。 Timestamp類的這種行爲是一個 錯誤,不應該被仿真。(Bloch,Effective Java,2nd Ed。)

相關問題