我将1000-01-01 00:00:00.0转换为LocalDateTime对象时出现问题。我已经检查了Oracle docs,看看是否支持1000-01-01,但这似乎不是问题。
我使用的版本
hibernate-core:5.2.1.Final
hibernate-commons-annotations:5.0.1.Final
hsqldb:2.3.4
spring-test-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时,它可以正常工作。
答案 0 :(得分:1)
对于Java 8中的新类型,您需要Hibernate的另一个依赖项。
html, body{
overflow:initial !important;
}
添加后,使用LocalDateTime,就像普通的Basic类型一样。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-java8</artifactId>
<version>5.0.1.Final</version>
</dependency>
<强>更新强> 我试着重现你的情况。 以下是我实施课程的方法。
private LocalDateTime validFrom;
数据库中的数据
@Entity
public class MyTable extends ABaseEntity {
private LocalDateTime startDate;
@Type(type="org.hibernate.type.LocalDateTimeType")
public LocalDateTime getStartDate() {
return startDate;
}
public void setStartDate(LocalDateTime startDate) {
this.startDate = startDate;
}
}
我回读时的结果
ID STARTDATE
1 25-AUG-16 12.00.00.000000000 AM
希望这会有所帮助!