我想使用Firebase刷新本地数据库。
我有2个表,一个是具有ID,名称...的植物,另一个是具有一对一关系中的plantId的价格。
我认为,我可以将Firebase DB数据存储在Room db中,但是本地数据库不使用生成的ID,因此该ID与Firebase ID相同。
因此,当Firebase实时数据库中的工厂数据发生更改时,我从本地db中的工厂表中删除所有记录,然后插入新的工厂记录,但我想保留第二个(价格)表记录,其中包含工厂ID。 其实我的问题是:房间抛出异常,因为它无法删除工厂表。
我读了很多书,并且找到了一个提示,可以设置onDelete = NO_ACTION,但无济于事。
有人可以帮忙,我该如何解决这个问题?
如果我不向价格表中添加数据,则可以刷新Plant表
My PlantEntity
@Entity(tableName = "plants")
public class PlantEntity {
@PrimaryKey
private Long id;
@ColumnInfo(name = "name")
private String name;
@ColumnInfo(name = "active")
private boolean active;
My PriceEntity
@Entity(tableName = "prices",
foreignKeys = {
@ForeignKey(
entity = PlantEntity.class,
parentColumns = "id",
childColumns = "plant_id",
onDelete = NO_ACTION),
@ForeignKey(
entity = AmountUnitEntity.class,
parentColumns = "id",
childColumns = "amount_unit_id",
onDelete = NO_ACTION)})
public class PriceEntity {
@PrimaryKey(autoGenerate = true)
private Long id;
@ColumnInfo(name = "description")
private String description;
@ColumnInfo(name = "min_price")
private int minPrice;
@ColumnInfo(name = "max_price")
private int maxPrice;
@ColumnInfo(name = "plant_id")
private Long plantId;
@ColumnInfo(name = "amount_unit_id")
private Long amountUnitId;
And my PlantDao
@Insert
void insert(List<PlantEntity> plantEntityList);
@Update
void update(PlantEntity plantEntity);
@Delete
void delete(PlantEntity plantEntity);
@Query("DELETE FROM plants")
void deleteAll();
答案 0 :(得分:1)
如果要保留已删除工厂的PriceEnity行,则无法定义工厂的ForeignKey,因为这是Foreignkey的约束冲突。
如果您不想保留PriceEntity,请使用onDelete = CASCADE
,这将删除父级的子级。