要使用Room的On Delete Cascade功能,需要确保以下几个步骤正确:
@ForeignKey
注解,并使用onDelete = CASCADE
参数。@Entity
public class ParentEntity {
@PrimaryKey
public int id;
// ...
@ForeignKey(entity = ChildEntity.class, parentColumns = "id", childColumns = "parentId", onDelete = ForeignKey.CASCADE)
public int parentId;
// ...
}
@Entity
public class ChildEntity {
@PrimaryKey
public int id;
// ...
}
@Database
注解的exportSchema
参数设置为false
,并在onCreate
方法中添加外键约束。@Database(entities = {ParentEntity.class, ChildEntity.class}, version = 1, exportSchema = false)
public abstract class MyDatabase extends RoomDatabase {
// ...
@Override
public void onCreate(SQLiteDatabase db) {
super.onCreate(db);
db.execSQL("PRAGMA foreign_keys=ON;");
}
// ...
}
@Dao
public interface ParentDao {
// ...
@Delete
void delete(ParentEntity parentEntity);
// ...
}
当删除父实体时,所有与之关联的子实体将自动被删除。
请注意,删除操作必须通过Room的DAO进行,而不是直接操作数据库。确保在删除操作中使用了适当的注解和方法。
如果仍然遇到问题,可以检查日志输出,查看是否有任何错误或警告消息,以便更好地了解问题的原因。