我需要就持久时间戳的做法达成共识,特别是对于专业人士和时间戳。与使用java.util.Date
相比,使用long
的利弊。
本讨论的范围:
关于我自己: 我认为自己是JPA的初学者,偶尔涉足它,直到现在才能将它应用到生产级项目中。在我目前的项目中,我承诺通过JPA调用使用ObjectDB(嵌入式)。
答案 0 :(得分:6)
以下类演示了在JPA中保留时间戳的3种可能方法:
@Entity
public class Timestamps {
private java.sql.Timestamp ts1;
private @Temporal(TemporalType.TIMESTAMP) java.util.Date ts2;
private long ts3;
:
}
关于性能和内存消耗,ts3更有效率。
ts3使用起来可能不如ts1和ts2(在ObjectDB数据库资源管理器,报告等中)。
所有三者都支持基本查询,例如按日期范围检索,但ts3不支持在查询中提取日期和时间部分(年,月等)。
所有这些表格都应该是便携式的。
ts1和ts2几乎相同。
ObjectDB manual中提供了更多详细信息。
答案 1 :(得分:0)
在java的文档中,时间戳看起来与java.util.date
更为相关http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/Timestamp.html
另外,如果您关心代码的语义,时间戳就是日期。
答案 2 :(得分:0)
在使用之前,您应该了解 java.sql.Timestamp 的事实:
Java平台库中有一些类可以扩展实例化 class并添加一个值组件。例如,java.sql.Timestamp 扩展java.util.Date并添加纳秒字段。等于实施 对于时间戳,确实违反了对称性,并且如果可能导致不稳定的行为 Timestamp和Date对象在同一个集合中使用,或以其他方式混合使用。 Timestamp类有一个免责声明警告程序员 混合日期和时间戳。虽然你不会遇到麻烦,只要你 让它们分开,没有什么可以阻止你混合它们,而且 产生的错误可能很难调试。 Timestamp类的这种行为是一个 错误,不应该被模仿。 (Bloch,Effective Java,2nd Ed。)