Java 检索时,存储在数据库上的Hibernate时间戳值为零
我想做的是获得两个事件之间的差异,在这种情况下,是指一家商店开始制造某些物品的事件,以及同一家商店开始将其运送到客户所在地的时间。 我正在使用java和hibernate开发这个WebApp。 该实体称为报告(因为我将根据此信息生成报告) 两个事件的属性都是:Java 检索时,存储在数据库上的Hibernate时间戳值为零,java,mysql,hibernate,netbeans,Java,Mysql,Hibernate,Netbeans,我想做的是获得两个事件之间的差异,在这种情况下,是指一家商店开始制造某些物品的事件,以及同一家商店开始将其运送到客户所在地的时间。 我正在使用java和hibernate开发这个WebApp。 该实体称为报告(因为我将根据此信息生成报告) 两个事件的属性都是: @Column private Timestamp fechaFabricacion; @Column private Timestamp fechaTransporte; 它们正确地存储在我的数据库中,如下所示: 2012-09
@Column
private Timestamp fechaFabricacion;
@Column
private Timestamp fechaTransporte;
它们正确地存储在我的数据库中,如下所示:
2012-09-24 13:13:10
用于制造开始
及
用于运输启动
我想报告的是,商店(在本例中)从制造到运输花费了30秒。
现在,这些值被完美地存储了起来,我遇到的问题是,当我试图从数据库中检索这些值并进行计算时,这就是我使用的代码
Query qr = em.createNamedQuery("Reporte.findByNumSeguimientoEntrega");
qr.setParameter("numSeguimientoEntrega",numSeguimiento);
List<Reporte> reportList = qr.getResultList();
Reporte report = reportList.get(0);
Timestamp timeStamp1 = report.getFechaInicio();
Timestamp timeStamp2 = report.getFechaFabricacion();
Long timeDiference =(timeStamp1.getTime()-timeStamp2.getTime())/(1000 * 60 * 60 * 24);
Query qr=em.createNamedQuery(“Reporte.findbynumseguimientorega”);
qr.setParameter(“numsguiminenterga”,numsguiminento);
List reportList=qr.getResultList();
Reporte report=reportList.get(0);
Timestamp Timestamp 1=report.getFechaInicio();
Timestamp Timestamp 2=report.getFechaFabricacion();
长时间差=(timeStamp1.getTime()-timeStamp2.getTime())/(1000*60*60*24);
问题是,正如我的调试器在下图中所示,我的两个时间戳值都得到了0:
我做错了什么?我怎样才能得到实际值和时间差
非常感谢您花时间阅读本文。您必须使用注释映射实体中的日期:
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DATE")
public Date getDate() {
return this.date;
}
我认为这样应该可以很好地工作。感谢您的快速响应,问题是我需要以月、日、小时、分钟和秒为单位存储它,因为制作可能需要几周甚至几秒钟。当我尝试使用@Temporal(TemporalType.TIMESTAMP)时,它不允许我编译,因为服务器会说:org.hibernate.AnnotationException:@Temporal应该只在java.util.Date或java.util.Calendar上设置。为什么不将其更改为日期?它将存储有关您所需时间的所有数据。这就是我使用它的方式,它确实适用于这些情况。可能在注释中,它在内部将日期存储为时间戳,但一旦时间戳扩展日期,对象必须是日期。你需要时间戳的纳米部分吗?好的,我需要得到每个事件之间的秒差。你说这个差应该是“秒”?但是您正在计算“天”(如果实际差异仅为30秒,那么天当然是0)。
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DATE")
public Date getDate() {
return this.date;
}