【发布时间】:2017-11-01 10:13:08
【问题描述】:
我正在使用 JPA 和 JEE 将 DB2 表迁移到 Oracle 数据库。因此,我遇到了“日期”和“时间”类型列的问题。更具体地说,在 Oracle 中没有数据类型“时间”,所以我试图从 DB2 存储 Oracle 的“日期”类型的列中的 2 列(一个是日期类型,另一个是时间类型)的串联数据库。这样,我将向您展示我是如何定义 Oracle 数据库中的列以及我定义的映射:
, DATA_HORA_CREACIO DATE DEFAULT
TO_DATE('0001-01-01-00.00.00','YYYY-MM-DD-HH24.MI.SS')
NOT NULL
private Date dataHoraCreacio;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DATA_HORA_CREACIO", nullable = false)
public Date getDataHoraCreacio() {
return this.dataHoraCreacio;
}
public void setDataHoraCreacio(Date dataHoraCreacio) {
this.dataHoraCreacio = dataHoraCreacio;
}
SimpleDateFormat sdfDateHour = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss");
String data = sdfDate.format(comandaAvariaDb2.getId().getDataCreacio());
String hora = sdfHour.format(comandaAvariaDb2.getId().getHoraCreacio());
comandaAvariaOraId.setDataHoraCreacio(sdfDateHour.parse(data + "-" + hora));
即便如此,虽然覆盖信息的工作变量被正确告知,但引用时间的部分被存储而不是插入到数据库中:
Variable working data: Thu Feb 02 18:42:53 CET 2006
DataBase inserted Value: 2006-02-02
我已经尝试了几个小时但没有成功。即便如此,如果我设法使用“时间戳”类型的列,但我认为不是最佳解决方案,因为毫秒占用了不必要的空间。
有什么想法吗?
提前致谢。
【问题讨论】:
-
看这里 - Oracle 确实有 TIME 数据类型:docs.oracle.com/javadb/10.8.3.0/ref/rrefsqlj21908.html - 另一个想法:你如何选择看到 2006-02-02 插入?为什么你使用 DATE 作为目标字段而不是 TIMESTAMP ?
-
@Jan,我认为该链接不正确。那是针对“java db”,而不是 oracle 数据库。
-
对。错误的链接。再说一遍:oracle DATE 列有一个时间部分:docs.oracle.com/cd/B19306_01/server.102/b14225/… - 请参阅我的更新答案。
标签: java oracle jpa jakarta-ee