我需要在堅持時間戳的做法上達成共識,特別是在使用java.util.Date
時與使用long
時相比使用弊端&。將日期或長期的時間戳記字段保留?
範圍本討論的:
- 性能
- 查詢靈活性(例如日期範圍)
- 在編碼和查詢
- 便攜性(例如遷移到其它DB)
自我簡介: 我認爲自己是JPA的初學者,曾經參與過一次一段時間,直到現在還不能將其應用到生產級項目中。在我目前的項目中,我承諾通過JPA調用來使用ObjectDB(嵌入式)。
我需要在堅持時間戳的做法上達成共識,特別是在使用java.util.Date
時與使用long
時相比使用弊端&。將日期或長期的時間戳記字段保留?
範圍本討論的:
自我簡介: 我認爲自己是JPA的初學者,曾經參與過一次一段時間,直到現在還不能將其應用到生產級項目中。在我目前的項目中,我承諾通過JPA調用來使用ObjectDB(嵌入式)。
下面的類演示了用於在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。
在java中的文檔,它看起來像時間戳是java.util.Date的
http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/Timestamp.html
此外,如果您關心的語義你的代碼上的相關,時間戳是一個日期。
你應該知道關於的java.sql.Timestamp的事實,在使用它之前:
有在做擴展可實例 類,並添加值組件Java平臺庫,一些類。例如,java.sql.Timestamp 擴展了java.util.Date並添加了一個納秒字段。 Timestamp的等號實現 確實違反了對稱性,並且如果 時間戳和日期對象在相同的集合中使用或以其他方式混合,則會導致不穩定的行爲。 Timestamp類有一個免責聲明,告誡程序員對 混合日期和時間戳。儘管只要你將它們分開,你就不會遇到麻煩,但沒有什麼可以阻止你將它們混合在一起,並且產生的錯誤可能很難調試。 Timestamp類的這種行爲是一個 錯誤,不應該被仿真。(Bloch,Effective Java,2nd Ed。)
我猜日期贏得便利性和可讀性,其中涉及查詢。 Long可能適用於原始數據應用,例如科學的,醫學的,其中查詢可能罕見或者在後期收集時被調用。報告生成。 – 2012-04-02 06:53:13