gpt4 book ai didi

java - Hibernate Timestamp 到 LocalDateTime 的转换意外结果

转载 作者:行者123 更新时间:2023-11-30 10:40:45 25 4
gpt4 key购买 nike

我在将 1000-01-01 00:00:00.0 转换为 LocalDateTime 对象时遇到了问题。我已经检查过 Oracle docs查看是否不支持 1000-01-01,但这似乎不是问题所在。

我使用的版本 hibernate 核心: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}

我的开始日期 1000-01-01T00:00 变成了 1000-01-05T23:09:21
endDate 不会出现此问题。

有没有人遇到过这个问题?或者有人知道怎么解决吗?如果您需要更多信息,请告诉我。非常感谢任何帮助。

更新:当我使用 LocalDate 而不是 LocalDateTime 时它有效。

最佳答案

对于 Java 8 中的新类型,您需要来自 Hibernate 的另一个依赖项。

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-java8</artifactId>
<version>5.0.1.Final</version>
</dependency>

添加后,像普通 Basic 类型一样使用 LocalDateTime。

private LocalDateTime validFrom;

已更新我试着重现你的情况。以下是我如何实现该类(class)。

@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

回读时的结果

2016-08-25T00:00

希望这会有所帮助!

关于java - Hibernate Timestamp 到 LocalDateTime 的转换意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38763583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com