【发布时间】:2016-12-10 08:31:21
【问题描述】:
我在将 1000-01-01 00:00:00.0 转换为 LocalDateTime 对象时遇到问题。我已经检查了Oracle docs,看看是否可能不支持 1000-01-01,但这似乎不是问题。
我正在使用的版本
休眠核心:5.2.1.Final
hibernate-commons-annotations: 5.0.1.Final
hsqldb:2.3.4
弹簧测试dbunit:1.2.0
这是 startDate 在 MyEntity.class 中的样子
@Basic
@Column(name = "start_date", nullable = false)
public LocalDateTime getstartDate() {
return startDate;
}
Hibernate 像这样创建它:
Query:[create table my_table (end_date timestamp not null, start_date timestamp not null)]
我有一个包含以下行的(示例)数据集
<my_table startDate="1000-01-01 00:00:00.0" endDate="4000-01-01 00:00:00.0" />
DBUnit 正在使用 Hibernate 将数据加载到内存数据库中
Query:["insert into my_table(START_DATE, END_DATE) values (?, ?)"]
Params:[(1=1000-01-01 00:00:00.0,2=4000-01-01 00:00:00.0)]
在我的 JUnit 测试中,我使用(Hibernate)Entitymanager 和以下命名查询来获取数据:
@NamedQuery(
name = "MyTable.fetchAll",
query = "FROM MyTable m"
)
选择查询(简化):
Query:["select end_date as date_e12_4_, start_date as date_s13_4_ from my_table mytable0_"]
在我的 JUnit 测试中,我断言返回的结果,但我得到一个 AssertionError:
java.lang.AssertionError:
Expected :MyEntity{startDate=1000-01-01T00:00, endDate=4000-01-01T00:00}
Actual :MyEntity{startDate=1000-01-05T23:09:21, endDate=4000-01-01T00:00}
我的 startDate 1000-01-01T00:00 变为 1000-01-05T23:09:21。
endDate 不会出现此问题。
以前有人遇到过这个问题吗?或者有人知道如何解决吗? 如果您需要更多信息,请告诉我。 非常感谢任何帮助。
更新:当我使用 LocalDate 而不是 LocalDateTime 时它可以工作。
【问题讨论】:
-
内存数据库使用什么引擎?是不是数据库不支持这样的日期?
-
自从我开始使用 LocalDateTime 之后,我才遇到了这个问题。我之前使用 java.sql.Timestamp 没有问题。在我的项目的时间戳期间已经存在失败的测试。
标签: java hibernate jpa java-8 hsqldb