【问题标题】:How does ORMLite store ForeignCollections in the database?ORMLite 如何在数据库中存储 ForeignCollections?
【发布时间】:2016-06-17 10:39:06
【问题描述】:

我有两个类,User 和 Artwork。用户可以拥有一组艺术品。一切都按预期工作,我可以从数据库中存储和检索对象,但我不明白它们的集合是如何持久化的。

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 );

对象被正确插入并且查询它们就像魅力一样。我真正不明白的是为什么我没有收藏的字段。

【问题讨论】:

    标签: android sqlite ormlite


    【解决方案1】:

    用户艺术品实体具有一对多关系。在关系数据库中,这被建模为Artwork,其中有一列引用User(在本例中为user_id)。要获取与User (id) 关联的Artwork 集合,ormlite 执行大致如下所示的查询:

    select * from Artwork where user_id = id

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      相关资源
      最近更新 更多