保存到数据库时丢失时间

Jes*_*sky 4 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();
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Mat*_*all 10

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

TemporalTypeJavaDoc中,TemporalType.DATE映射到java.sql.Date,正如你所看到的,因为没有时间组件:

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