【问题标题】:Oracle DB: Map Date field type with specific format from db into the entity model fieldOracle DB:将具有特定格式的日期字段类型从 db 映射到实体模型字段
【发布时间】:2018-02-14 19:39:01
【问题描述】:

我正在尝试将类型为 Date 的字段映射到我的 Oracle DB 实体中,如下所示:10.06.1999 10:58:45

我尝试过使用不同的类型,java.util.Datejava.sql.Date - 它们在尝试将 db 的数据读入模型时都会抛出异常。

只有java.sql.Time 不会抛出异常。它不适合我的情况,因为 UI 只显示时间,当从 UI 保存这个值时,只会用时间而不是日期覆盖数据库中的数据,例如:10:58:45

在实体模式类中使用(新的 Java 8)DateTime 类和模型内的格式化程序来告诉模型正确解析日期是否是一种好方法?

提前致谢。

【问题讨论】:

  • 为什么将日期时间作为文本存储在数据库中?
  • 如果它是数据库中的DATE,它怎么会有时间组件? TIMESTAMP 包含日期和时间,DATE 仅包含日期。
  • @Kayaman 因为它是一个 oracle 数据库,我一直在问自己同样的问题,但它就是这样...... :(
  • @OleV.V.我正在使用 JPA 和 Hibernate。
  • 如果您有足够新的 Hibernate,则不需要任何特殊处理即可使用新的 java.time 类。该值是二进制的,但它似乎被转换为 String 作为某种形式的最后手段。但是,如果 java.sql.Timestamp 工作而不是 java.sql.Date,您可以尝试。如果可行,那么这是一个转换问题(您可以为此准备现成的组件)。

标签: java oracle hibernate date spring-data


【解决方案1】:

要将您的数据库 DATE 列映射到 java.util.Date(或其他基于类),您需要添加 @Temporal 注释。

http://docs.oracle.com/javaee/6/api/javax/persistence/Temporal.html

【讨论】:

  • 同样的错误Can not deserialize value of type java.util.Date from String "17:06:03": not a valid representation (error: Failed to parse Date value '17:06:03': Can not parse date "17:06:03": not compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))
  • "java.util.Date from String "17:06:03" - "String" 来自哪里?它是否保存在数据库中?
  • 如前所述,字符串作为最后的手段来尝试转换日期。数据库中的字段类型为DATE,显示如下:06/10/1999 10:58:36
  • 我认为存在误解。如果您已将数据保存到 DATE 列,则无需进行解析。它是数据库中使用其自己的内部表示的日期,并由 JDBC 驱动程序以该格式读取。无需进行字符串解析。
  • 我认为问题在于它没有以正确的DATE 格式存储,Java 无法将其理解为日期..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 2021-11-25
  • 2017-10-16
  • 2014-12-26
  • 1970-01-01
  • 2017-06-07
相关资源
最近更新 更多