gpt4 book ai didi

android - GreenDao 是否可以只在一个方向上建立一对多关系?

转载 作者:太空狗 更新时间:2023-10-29 15:03:41 27 4
gpt4 key购买 nike

假设我有一个 Ingredient 实体和一个 Recipe 实体。许多食谱可能引用相同的成分。

recipe 1 uses ingredients 1, 2 and 3
recipe 2 uses ingredients 1, 3 and 5

我希望能够从食谱中加载配料,但不能相反。

我想我需要通过创建一个单独的实体来跟踪所有配方 <-> 成分映射,将其建模为多对多关系。

我的理解是否正确,或者有什么方法可以使它与 ToMany 关系一起工作?

我不认为使用单个 ToMany 关系会起作用,因为 GreenDao 要求它们在目标实体中有一个外键返回到原始实体(参见 docs 中的“建模对多关系”)。这意味着配料只能引用一个食谱——一旦两个食谱引用相同的配料,那么其中一个将失去其关系。

FTR,如果你没有在目标实体中设置外键,那么 ToMany 关系在重新启动应用程序后就会丢失(即它只适用于当前数据库 session )。提示:要在您的自动化测试中模拟这种情况,只需在加载对象并断言它包含您期望的值之前调用 daoSession.clear()

最佳答案

由于一种成分可以是许多食谱的一部分,而一个食谱由许多成分组成,因此这种关系显然是多对多关系。

在数据库中对此建模的常用方法是将关系存储在单独的表中。

这与 greendao 的使用无关。要使用 greendao 实现此模型,您必须创建一个新实体 RecipeToIngredient 并使用此实体建立您的关系。

更新

如果您可以自由设计数据库,则可以使用如下模式:

Table IngredientType
--------------------------
id | integer (pk)
description | text

Table Recipe
--------------------------
id | integer (pk)
description | text

Table Ingredient
--------------------------
id_recipe | integer (fk)
id_type | integer (fk)
unit | text
quantity | integer

这意味着从 Ingredient 到 Recipe 以及从 Igredient 到 IngredientType 的 toMany 关系。从技术上讲,这也是一个 Many2Many 映射,在 IngredientType 和 Recipe 之间具有附加属性。

在 greendao 中,您将使用两个 toMany 关系对此进行建模。

关于android - GreenDao 是否可以只在一个方向上建立一对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24108504/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com