問題描述:
若有個物件想透過 finalDB 儲存但又實作了 Serializable 介面。
當去存取該物件時,會出現”serialVersionUID has type long, got null” 相關問題。
發生問題的 class 如下
@Table(name = "GoodItem") public class GoodItem implements Serializable{ private static final long serialVersionUID = -6588468312284378785L; @Id private String id; ...
顯示的錯誤訊息如下
java.lang.IllegalArgumentException: field xxx.serialVersionUID has type long, got null at java.lang.reflect.Field.set(Native Method) at net.tsz.afinal.db.table.Property.setValue(Property.java:70) at net.tsz.afinal.db.sqlite.CursorUtils.getEntity(CursorUtils.java:45) at net.tsz.afinal.FinalDb.findAllBySql(FinalDb.java:574) at net.tsz.afinal.FinalDb.findAll(FinalDb.java:528) ...
基本上就是 serialVersionUID 和 finalDB 發生衝突。
解決方法:
將 serialVersionUID 加上 @Transient 註解來解決,如下
@Table(name = "GoodItem") public class GoodItem implements Serializable{ @Transient private static final long serialVersionUID = -6588468312284378785L; @Id private String id; ...