将时间戳字段保留为Date或Long?

Aug*_*hoo 5 persistence timestamp jpa

我需要就持久时间戳的做法达成共识,特别是与使用java.util.Date相比的使用的利弊long.

讨论范围:

  • 性能
  • 查询灵活性(例如日期范围)
  • 编码和查询中的任何危险
  • 可移植性(例如迁移到其他数据库)

关于我自己:我认为自己是JPA的初学者,偶尔涉足它,直到现在才能将它应用到生产水平项目中.在我目前的项目中,我承诺通过JPA调用使用ObjectDB(嵌入式).

Obj*_*tDB 6

以下类演示了在JPA中持久化时间戳的3种可能方法:

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

关于性能和内存消耗,ts3更有效率.

使用ts3可能不如ts1和ts2(在ObjectDB数据库资源管理器,报告等中).

所有这三个都支持基本查询,例如按日期范围检索,但ts3不支持在查询中提取日期和时间部分(YEAR,MONTH等).

所有这些形式都应该是便携式的.

ts1和ts2实际上是等价的.

ObjectDB手册中提供了更多详细信息.