問題描述:

若有個物件想透過 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;
...