我在 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/