保存到数据库时丢失时间

时间:2012-12-10 22:45:22

标签: java sql hibernate

我在Web服务器上使用Java和hibernate来保存到Oracle SQL数据库。我创建了一个Java Date对象,但出于某种原因,当它进入数据库时​​,它只有日期而不是时间。例如,Date对象将显示“2012年12月10日下午1:23:45”,但在数据库中它只显示“10-DEC-12”

知道为什么会这样吗?以下是如何创建和保存日期的示例。

service.java

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

Nos nos = new Nos();
nos.setTimeReceived( new Date() );
session.save( nos );

tx.commit();

Nos.java

@Entity
@Table(name = "nos")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Nos
{
    @Id
    @GeneratedValue
    private Long id;

    @Basic(optional=false)
    @Temporal(TemporalType.DATE)
    @Column(name="timereceived")
    private java.util.Date timeReceived;

// getters and setters

1 个答案:

答案 0 :(得分:10)

使用TemporalType.TIMESTAMP,对应java.sql.Timestamp

根据the TemporalType JavaDocsTemporalType.DATE映射到java.sql.Date,正如您所看到的那样,没有时间组件:

  

为了符合SQL DATE的定义,java.sql.Date实例包含的毫秒值必须通过在特定时间内将小时,分钟,秒和毫秒设置为零来“标准化”与实例关联的区域。