來自包java.time
的LocalDateTime
的類別爲value based classes。如果我有一個使用這樣的對象作爲字段的實體,我會遇到以下「問題」: 基於值的類不應被序列化。但是,JPA實體必須實現Serializable接口。這個悖論的解決方案是什麼?不應該有人使用LocalDateTime作爲JPA實體的字段嗎?改用日期?這將是不令人滿意的。java.time和JPA
這個問題是一個聲納規則squid:S3437
,因此也有很多項目的錯誤的,因爲我們從日期到LocalDateTime改變......
不兼容的解決方案由於基於值類的用法:
@Entity
public class MyEntity implements Serializable{
@Column
private String id; // This is fine
@Column
private LocalDateTime updated; // This is not ok, as LocalDateTime is a value based class
@Column
private Date created; // This however is fine..
}
爲什麼你會認爲基於價值的課程不應該被序列化?當然,他們可以序列化。這就是爲什麼它實現了Serializable。 –
好吧,我們現在有這個故事,目前我們只是'@SuppressWarnings(「squid:S3437」)',現在有一個關於dev-list的評論(我會試着去挖掘它)它說*這*可能*禁止這些基於價值的類*被移動到基於價值*類型* – Eugene
@JBNizet這是LocalDateTime真的很奇怪。它也是一個基於值的類。如果您查看oracle文檔,您會發現以下有關基於值的類的聲明:https:// docs。oracle.com/javase/8/docs/api/java/lang/doc-files/ValueBased.html 一個程序可能產生不可預測的結果,如果它試圖兩個引用區分的基於值的類[相等的值... ]序列化或任何其他身份敏感機制。這種使用可能會產生不可預測的影響,應予以避免。 – itsme