我在 android 上使用 OrmLite 的结构类似于以下内容:

Book 类有一个主要 BookArticle 的集合和一个辅助 BookArticle 的集合:

    @DatabaseTable(tableName = "BookV1", daoClass = BookDaoImplV1.class)
public class Book implements IBook {

    @DatabaseField(id = true)
    private String id;

    @ForeignCollectionField(eager = false)
    private ForeignCollection<BookArticle> primaryArticles;

    @ForeignCollectionField(eager = false)
    private ForeignCollection<BookArticle> secondaryArticles;

    // constructor getters setters etc...

}

然后 BookArticle 声明如下:
    @DatabaseTable(tableName = "BookArticleV1", daoClass = BookArticleDaoImplV1.class)
public class BookArticle implements IBookArticle {

    @DatabaseField(id = true)
    private String id;

    @DatabaseField
    private String title;

    @DatabaseField
    private String summary;

    // for ORM mapping only
    @DatabaseField(foreign = true, foreignAutoRefresh = true, columnName = BOOK_FIELDNAME, index = true)
    private Book book;

    // constructor getters setters etc..

}

现在使用 DAO 保存 BookArticles 和 Book 工作正常,但是当我想从数据库中获取我的 Book 实体并访问主要或次要文章(在 refresh() 之后)时,我遇到了问题,因为两个集合都包含所有文章(主要和次要)在其“书”列中具有书的 ID。

显然,当从数据库中获取时,我需要将这些主要和次要文章分开。

我原以为“foreignFieldName”是我问题的答案。
@ForeignCollectionField(eager = false, foreignFieldName = "secondaryArticles")
private ForeignCollection<BookArticle> secondaryArticles;

但显然它不会那样工作。

有没有办法让我区分这两个集合?
也许使用一个简单的注释参数,例如“owningFieldName”或类似的,可以与 BookArticle 数据一起保存在 DB 中?

非常感谢您的帮助。

亚历克斯

最佳答案

我遇到了同样的问题。

不是真正的解决方案,但您可以尝试仅使用一个带有 bool 值的列表来在主要/次要文章之间切换,如下所示:

@DatabaseTable(tableName = "BookV1", daoClass = BookDaoImplV1.class)
public class Book implements IBook {

    @DatabaseField(id = true)
    private String id;

    @ForeignCollectionField(eager = false)
    private ForeignCollection<BookArticle> articles;

    // constructor getters setters etc...

}

然后对于 BookArticle 类
@DatabaseTable(tableName = "BookArticleV1", daoClass = BookArticleDaoImplV1.class)
public class BookArticle implements IBookArticle {

    @DatabaseField(id = true)
    private String id;

    @DatabaseField
    private String title;

    @DatabaseField
    private String summary;

    @DatabaseField
    private boolean isSecondary;

    // for ORM mapping only
    @DatabaseField(foreign = true, foreignAutoRefresh = true, columnName = BOOK_FIELDNAME, index = true)
    private Book book;

    // constructor getters setters etc..

}

希望看到真实的答案

关于android - ORMLite 中多个同类型的 ForeignCollection,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23507127/

10-12 06:05