【发布时间】:2021-06-14 20:49:01
【问题描述】:
如何使用事务从 Android 房间的两个表中删除数据?我不能只从一个表中删除数据,要么都删除,要么都不删除。两个实体各有 1 个 DAO。
TimerDesign 是父级,IntervalDesign 是子级
我已经设置了一个父-子类,因为稍后我将需要该类的 1:M 关系来获取每个父级及其所有子级,目前尝试删除一个父级及其所有子级仅从父表中删除.
public class FullTimerDesigns extends TimerDesign {
@Embedded public TimerDesign timerDesign;
@Relation(parentColumn = "timer_design_id", entityColumn = "parent_timer_id", entity = IntervalDesign.class)
public List<IntervalDesign> intervalDesigns;
}
我需要指定父级的 id 以删除它及其所有子级。我知道我的 DAO @Query 没有指定子表,我似乎也无法进行内部连接来解决这个问题。
@Dao
public interface ParentWithChildDAO {
@Transaction
@Query("DELETE FROM parent WHERE parent_id = :id")
public void deleteOneParentWithAllChildren(int id);
@Transaction
@Query("DELETE FROM parent")
public void deleteAllParentsWithAllChildren();
}
我可以为Room 1:m 映射类找到的大多数示例和documentation 仅显示如何从两个表中返回所有内容,我找不到任何要删除的信息。
【问题讨论】:
-
在子实体关系中定义外来父键的地方添加
onDelete = ForeignKey.CASCADE
标签: android android-room