【问题标题】:Oracle overwrites my Date?Oracle 会覆盖我的日期吗?
【发布时间】:2012-10-08 23:29:53
【问题描述】:

我遇到了 Oracle Dates 的问题。插入 OracleDB 后,Java 应用程序中的预定义日期似乎有所不同。

通过 JPA 实体插入:

entity.setDateOfCreation(new Date(System.currentTimeInMillis())); 
// 1350565985000

提交和检索后:

entity.getDateOfCreation() // 1350565985047

为什么会有所不同?

我假设 Oracle 只会将具有这些精确毫秒的特定日期对象插入到数据库中。但显然不是。由于最小的延迟,它似乎以毫秒为单位用自己的日期“覆盖”给定的日期(尽管我不使用@GeneratedValue)。

【问题讨论】:

  • 你在哪里看到结束 85000 的时间?并且是DATETIMESTAMP 类型的数据库列?
  • 列类型为@Temporal(TemporalType.TIMESTAMP)
  • Oracle数据库中实际列的数据类型是什么? Oracle DATE 不存储毫秒——Oracle DATE 仅精确到秒。你有没有机会在你的问题中颠倒了 cmets?如果 getDateOfCreation 返回一个毫秒为 0 的值,而 setDateOfCreation 传入一个毫秒为单位的值,那么如果 Oracle 列的数据类型是 DATE,这将是可以解释的。
  • 请发布表格定义。谢谢。
  • @Justin:谢谢,你说得对,我两次都以毫秒为单位混淆了。末尾带有 000 的那个是我从数据库中读取的日期。我可以插入不带毫秒的日期吗?

标签: oracle date jpa insert


【解决方案1】:

您使用的表是否有填充该列的触发器?我希望它确实如此。上次我遇到了很多问题,应用服务器和数据库之间的时间差异。最好有一个单一的时间来确保整个州的时间一致。

【讨论】:

  • 您好,感谢您的参与。不,我看不到此表的任何触发器。它应该是“干净的”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
  • 2021-10-25
  • 2016-07-16
相关资源
最近更新 更多