gpt4 book ai didi

android - 房间 : deleting a ForeignKey or setting the ForeignKey to a default value

转载 作者:行者123 更新时间:2023-11-29 02:24:46 26 4
gpt4 key购买 nike

我有以下实体:

@Entity(indices  = {@Index("address")},
foreignKeys = @ForeignKey(
entity = Address.class,
parentColumns = "address",
childColumns = "address",
onUpdate = CASCADE,
onDelete = SET_DEFAULT))
public class Human {
@PrimaryKey(autoGenerate = true)
public long id;

@NonNull
public String name;

@NonNull
public String address;
}

@Entity
public class Address {

@PrimaryKey
@NonNull
public String address;

public int someInt;
}

我添加了具有不同地址的“人”,稍后我尝试使用以下方式删除或编辑:

@Insert(onConflict = REPLACE)
void add(Human human);

我看到的选项和它们的问题:

  1. 我有一个地址列表,其中一个是“默认”。当我删除一个地址时,我希望居住在被删除地址的“人类”“移动”到“默认”。我用过:

    @Query("delete from Address where address = :address")
    void deleteAddress(String address);

所以 onDelete = SET_DEFAULT 似乎并没有像我想象的那样工作,如果我在人类实体中设置一个默认值来解决。

当前失败并显示:NOT NULL 约束失败。

  1. 删除的替代方法是编辑地址并将其设置为“默认”,从而与现有的“默认”条目合并。我试过:

    @Query("update Address SET address = :address WHERE address = :addressToEdit")
    void editAddress(String addressToEdit, String newAddress);

这当前失败了:UNIQUE 约束失败。因为已经有一个同名的地址,显然。

  1. 在两个实体中将地址设置为@Nullable。这样,“默认”地址为空。这给我的解决方案增加了额外的复杂性(我不喜欢它),而且我似乎无法使用以下代码查询具有空地址的 Humans,因为它不返回任何内容。

    @Query("select * from Human where address = :address")
    LiveData<List<Human>> getHumans(String address);

我怎样才能将此设置设为默认的已删除地址(外键)?

最佳答案

我建议修改您的地址实体并添加 id 字段作为整数自动递增。然后在人类实体中,您可以通过 id 字段引用地址。因此,在删除地址记录之前,您可以更新使用要删除的引用的人员记录,默认引用 ID 例如:1 然后您可以通过其 ID 删除此地址记录。在这里您可以解决地址唯一性约束问题。

关于android - 房间 : deleting a ForeignKey or setting the ForeignKey to a default value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52936981/

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