簡體   English   中英

使用ORMLite將枚舉集合存儲在數據庫中

[英]Store enum collection in database using ORMLite

我正在嘗試使用ORMLite將枚舉集合保存在數據庫中。 所以在創建Dao時我遇到了無參數構造函數錯誤

我曾嘗試創建默認的程序包構造函數,但這無濟於事-我認為ORMLite需要公共構造函數,但枚舉不能使用它。

我的枚舉看起來像這樣(分離的.java文件)

enum RankPermission {
  @DatabaseField(dataType=DataType.ENUM_TO_STRING)
  ALL,
  //...
  ;

  RankPermission() {}
}

而在另一個類中的集合是

@DatabaseTable
class Rank {
  @ForeignCollectionField
  Collection<RankPermission> permissions;

  public Rank() {}
}

我得到的道創建和錯誤

DaoManager.createDao(conn, Rank.class);

        [23:31:12 ERROR]: Can't find a no-arg constructor for class package.core.rank.RankPermission
        java.lang.IllegalArgumentException: Can't find a no-arg constructor for class package.core.rank.RankPermission
        at com.j256.ormlite.table.DatabaseTableConfig.findNoArgConstructor(DatabaseTableConfig.java:229) ~[?:?]
        at com.j256.ormlite.table.DatabaseTableConfig.getConstructor(DatabaseTableConfig.java:154) ~[?:?]
        at com.j256.ormlite.table.TableInfo.<init>(TableInfo.java:96) ~[?:?]
        at com.j256.ormlite.table.TableInfo.<init>(TableInfo.java:54) ~[?:?]
        at com.j256.ormlite.dao.BaseDaoImpl.initialize(BaseDaoImpl.java:156) ~[?:?]
        at com.j256.ormlite.dao.BaseDaoImpl.<init>(BaseDaoImpl.java:133) ~[?:?]
        at com.j256.ormlite.dao.BaseDaoImpl.<init>(BaseDaoImpl.java:112) ~[?:?]
        at com.j256.ormlite.dao.BaseDaoImpl$5.<init>(BaseDaoImpl.java:1044) ~[?:?]
        at com.j256.ormlite.dao.BaseDaoImpl.createDao(BaseDaoImpl.java:1044) ~[?:?]
        at com.j256.ormlite.dao.DaoManager.createDao(DaoManager.java:70) ~[?:?]
        at com.j256.ormlite.field.FieldType.configDaoInformation(FieldType.java:392) ~[?:?]
        at com.j256.ormlite.dao.BaseDaoImpl.initialize(BaseDaoImpl.java:206) ~[?:?]
        at com.j256.ormlite.dao.BaseDaoImpl.<init>(BaseDaoImpl.java:133) ~[?:?]
        at com.j256.ormlite.dao.BaseDaoImpl.<init>(BaseDaoImpl.java:112) ~[?:?]
        at com.j256.ormlite.dao.BaseDaoImpl$5.<init>(BaseDaoImpl.java:1044) ~[?:?]
        at com.j256.ormlite.dao.BaseDaoImpl.createDao(BaseDaoImpl.java:1044) ~[?:?]
        at com.j256.ormlite.dao.DaoManager.createDao(DaoManager.java:70) ~[?:?]
        at package.storage.yaml.db.DatabaseConnector.initDaos(DatabaseConnector.java:152) ~[?:?]

我想以枚舉形式保存此集合,因為它更舒適

為了解決這個問題,我只使用了java.util包中的任何Collection並設置了@DatabaseField(dataType=DataType.SERIALIZABLE)批注而不是@ForeignCollectionField來保存序列化的數據,所以現在代碼是

class Rank {
    @DatabaseField(dataType=DataType.SERIALIZABLE)
    private HashSet<RankPermission> permissions = new HashSet<>();
}

HashSet類型設置為field很重要,因為ORMLite不會在Set上檢測可序列化的接口。

暫無
暫無

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

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