簡體   English   中英

Hibernate 5無法正確處理LocalDate

[英]Hibernate 5 doesn't handle LocalDate properly

我們正在將我們的Hibernate(5.0.2)代碼遷移到Java 8,它還涉及從java.util.Datejava.time.LocalDate轉換(以解決與Java 7中的日期處理相關的問題)。 我遇到的一個問題是Hibernate如何處理我們用作“零日期”的特殊值,即0001-01-01

該屬性聲明如下:

@NotNull
@Column(name = "START_DATE", nullable = false)
private LocalDate startDate;

該值作為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;
}

並運行此測試:

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);
});

我明白了:

java.lang.AssertionError: expected:<0001-01-01> but was:<0000-12-29>

Jira問題就在這里

它對OffsetDateTimeOffsetDateTime

@Entity(name = "OffsetDateTimeEvent")
public static class OffsetDateTimeEvent {

    @Id
    private Long id;

    @NotNull
    @Column(name = "START_DATE", nullable = false)
    private OffsetDateTime startDate;
}

並運行此測試:

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);
});

拋出:

java.lang.AssertionError: expected:<0001-01-01T00:00Z> but was:<0001-01-01T01:34:52+01:34:52>

Jira問題就在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM