【问题标题】:Storing a model object with Lists in Room Database在房间数据库中存储带有列表的模型对象
【发布时间】:2017-08-02 09:59:07
【问题描述】:

查看各种在线资源,关于这个主题,我似乎无法弄清楚这一点。

我有一个看起来像这样的模型对象:HomeResponse

@Entity(tableName = "HomeData")
public class HomeResponse {

  @PrimaryKey
  public  int counts;

  public List<Trade> mTrades;
}

我的Trades 对象看起来像这样:

@Entity
public class Trade {
  public int tradeId;
  public String title;
}

我首先看到的是@TypeConverter 然而,这似乎只适用于只包含原始字段的 POJO。

看来,我要找的是@ForeignKey

这仍然感觉不对。因为我的Trades 对象不仅会出现在HomeResponse 对象中。我可能在其他与不同 Tades 相关的 POLO 中有它。

HomeResponse 也将Trades 对象也存储在数据库中的理想方法是什么?

【问题讨论】:

    标签: java android android-room


    【解决方案1】:

    我有一个看起来像这样的模型对象:HomeResponse

    这不是一个合适的房间@Entity。删除public List&lt;Trade&gt; mTrades 字段。

    看来,我要找的是@ForeignKey

    正确,在Trade 上,指向HomeResponse

    这仍然感觉不对。因为我的 Trades 对象不仅会出现在 HomeResponse 对象中。我可能会在与不同 Tades 相关的其他 POLO 中使用它。

    我不确定 POLO 是什么。无论如何,实体充当数据库表的模型。将 Room 搁置几分钟,然后设计您的桌子结构。然后,创建反映表结构的实体类。

    让 HomeResponse 也将 Trades 对象存储在数据库中的理想方式是什么?

    它没有。你的 DAO 保存 HomeResponse 对象和 Trade 对象。

    【讨论】:

    • 感谢您的回复。 POLO 是一个错字,我的意思是 POJO。如果 Trade 对象可以属于许多其他对象呢?除了 HomeResponse。那么我是否需要在 Trade 对象中有许多 ForeginKeys? - 我对 TypeConverts 有点运气,正忙于试验它们。
    • @Tander:“感谢您的回复。POLO 是一个错字,我的意思是 POJO”——啊,好的。 “那么我需要在 Trade 对象中有很多 ForeginKeys 吗?” - 我不知道。同样,设计您的数据库结构。如果你没有 Room,并且你在一个普通的 SQL 数据库中实现它,你的表会是什么样子?例如,如果 Trade 可以有多个父级(不是父级类型,而是实际的父级),则您有一个 M:N 关系,它需要一个连接表(以及 Room 中某种对应的连接实体)。
    • 我想如果我使用原始 SQL,每个交易数组都会有自己的表。因为它们将与不同的父母相关,并且没有两个交易表会包含相同的数据,如果这有意义的话。
    • @Tander:好的。这将需要两个实体,每个表一个。但是,继承是有效的,因此您可以创建一个处理所有公共字段的公共类,然后有两个实体类从它继承并引入任何独特的东西,例如外键细节。 This project 显示了这样的继承,因为我有一个抽象的 Plan,它由 TripFlightLodging 实体扩展。
    • 谢谢! - HomeResponse 如何 1. 引用正确的表,以及 2. 如何将 HomeResponse 存储在 DB 中(使用 DAO)和它应该拥有的交易数组?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多