4

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

知道为什么会发生这种情况吗?下面是如何创建和保存日期的示例。

服务.java

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

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

tx.commit();

没有.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
4

1 回答 1

10

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

根据JavaDocs,映射到 a TemporalType正如您所看到的那样,它没有时间组件:TemporalType.DATEjava.sql.Date

为了符合 SQL 的定义,DATE由实例包装的毫秒值java.sql.Date必须通过在与实例关联的特定时区中将小时、分钟、秒和毫秒设置为零来“规范化”。

于 2012-12-10T22:48:29.380 回答