ykt*_*too 6 java datetime hibernate java-8 hibernate-5.x
我们正在将我们的Hibernate(5.0.2)代码迁移到Java 8,它还涉及从转换java.util.Date
到java.time.LocalDate
(以解决与Java 7中的日期处理相关的问题).我遇到的一个问题是Hibernate如何处理我们用作"零日期"的特殊值,即0001-01-01
.
该属性声明如下:
@NotNull
@Column(name = "START_DATE", nullable = false)
private LocalDate startDate;
Run Code Online (Sandbox Code Playgroud)
该值存储在数据库中0001-01-01
,但是当它被Hibernate加载时,它突然转向0000-12-29
.我假设发生这种情况是因为Hibernate默认使用格里高利历,并且因为这个日期是在它引入之前,所以使用了一些转换.
有没有办法配置Hibernate来禁用这种行为(除了实现一个特殊的属性编写器)?
这确实是一个错误。我在下面的测试中复制了它。我将为其打开一个错误报告。
如果我使用LocalDate
:
@Entity(name = "LocalDateEvent")
public class LocalDateEvent {
@Id
private Long id;
@NotNull
@Column(name = "START_DATE", nullable = false)
private LocalDate startDate;
}
Run Code Online (Sandbox Code Playgroud)
并运行这个测试:
doInJPA(entityManager -> {
LocalDateEvent event = new LocalDateEvent();
event.id = 1L;
event.startDate = LocalDate.of(1, 1, 1);
entityManager.persist(event);
});
doInJPA(entityManager -> {
LocalDateEvent event = entityManager.find(LocalDateEvent.class, 1L);
assertEquals(LocalDate.of(1, 1, 1), event.startDate);
});
Run Code Online (Sandbox Code Playgroud)
我得到:
java.lang.AssertionError: expected:<0001-01-01> but was:<0000-12-29>
Run Code Online (Sandbox Code Playgroud)
Jira问题就在这里。
它不适用于OffsetDateTime
:
@Entity(name = "OffsetDateTimeEvent")
public static class OffsetDateTimeEvent {
@Id
private Long id;
@NotNull
@Column(name = "START_DATE", nullable = false)
private OffsetDateTime startDate;
}
Run Code Online (Sandbox Code Playgroud)
并运行这个测试:
doInJPA(entityManager -> {
OffsetDateTimeEvent event = new OffsetDateTimeEvent();
event.id = 1L;
event.startDate = OffsetDateTime.of(1, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
entityManager.persist(event);
});
doInJPA(entityManager -> {
OffsetDateTimeEvent event = entityManager.find(OffsetDateTimeEvent.class, 1L);
assertEquals(OffsetDateTime.of(1, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC), event.startDate);
});
Run Code Online (Sandbox Code Playgroud)
投掷:
java.lang.AssertionError: expected:<0001-01-01T00:00Z> but was:<0001-01-01T01:34:52+01:34:52>
Run Code Online (Sandbox Code Playgroud)
与此相关的Jira问题在这里。
归档时间: |
|
查看次数: |
1370 次 |
最近记录: |