ORMLite如何在数据库中存储ForeignCollections?

时间:2016-06-17 10:39:06

标签: android sqlite ormlite

我有两个课程,用户和艺术品。用户可以拥有艺术品的集合。一切都按预期工作,我可以存储和检索数据库中的对象,但我不明白他们的收集是如何保持的。

public class User {

    @DatabaseField(allowGeneratedIdInsert = true, generatedId = true, unique = true)
    Long id;

    @DatabaseField
    String name;

    @DatabaseField(columnName = "artwork_id", foreign = true, foreignAutoCreate = true, foreignAutoRefresh = true)
    Artwork masterPiece;

    @ForeignCollectionField(eager = true)
    Collection<Artwork> artworks;
} 

public class Artwork {

    @DatabaseField(allowGeneratedIdInsert = true, generatedId = true, unique = true)
    Long id;

    @DatabaseField
    String name;

    @DatabaseField
    String file;

    @DatabaseField(columnName = "user_id", foreign = true, foreignAutoCreate = true, foreignAutoRefresh = true)
    User owner;
}

我创建了一些艺术作品,将它们添加到集合中并在用户中设置集合。检查.db(.schema)时,我得到了这个:

CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE `user` (`id` INTEGER PRIMARY KEY AUTOINCREMENT , `name` VARCHAR , `artwork_id` BIGINT );
CREATE TABLE `artwork` (`id` INTEGER PRIMARY KEY AUTOINCREMENT , `name` VARCHAR , `file` VARCHAR , `user_id` BIGINT );

正确插入对象并查询它们就像魅力一样。我真正不明白的是为什么我没有收集领域的原因。

1 个答案:

答案 0 :(得分:1)

用户图稿实体具有一对多关系。在关系数据库中,这被建模为Artwork,其列引用User(在这种情况下为user_id)。要获取与Artwork(id)关联的User的集合,ormlite会执行大致类似的查询:

select * from Artwork where user_id = id