Android Room onDelete级联无法正常工作

啤酒

所以我有一个带有Deck表,Card表和DeckCard表的数据库,因为这两者之间存在多对多的关系...当我尝试删除卡片组时,我删除了ID匹配的DeckCard行并且我已经将外键设置为onDelete = CASCADE,但是它没有删除任何提示吗?这是我n对n区别的存储库

public class DeckCardRepository {
    private DeckWithCardsDao mDeckWithCardsDao;
     public void delete(Deck deck){
        DecksDatabase.databaseWriteExecutor.execute(() -> 
         mDeckWithCardsDao.delete(deck.getId()));
    }

}

甲板类

@Entity(tableName = "decks")
public class Deck implements Serializable {
    @PrimaryKey
    private long id;
    private String keyforgeId;
    private String name;
    @TypeConverters({ExpansionTypeConverter.class})
    private Expansion expansion;
    private int creatureCount;
    private int actionCount;
    private int artifactCount;
    private int upgradeCount;
    private int sasRating;
    private int powerLevel;
    private int chains;
    private int wins;
    private int losses;
    private int totalPower;
    private int totalArmor;
    private int localWins;
    private int localLosses;
}

卡类

Entity(tableName = "cards")
public class Card implements Serializable {
    @PrimaryKey
    @NonNull
    private String id;
    private String card_title;
    private String card_type;
    @TypeConverters({HouseArrayTypeConverter.class})
    private House house;
    private String card_text;
    private int amber;
    private String front_image;
}

卡组等级

Entity(tableName = "cards_deck_join",
        primaryKeys = {"cardId", "deckId"},
        foreignKeys = {
                @ForeignKey(
                        entity = Card.class,
                        parentColumns = "id",
                        childColumns = "cardId"),
                @ForeignKey(onDelete = CASCADE,
                        entity = Deck.class,
                        parentColumns = "id",
                        childColumns = "deckId"),
        })
public class CardsDeckRef {
    @NonNull
    private String cardId;
    private long deckId;
    private int count;

    public CardsDeckRef(String cardId, long deckId, int count) {
        this.cardId = cardId;
        this.deckId = deckId;
        this.count = count;
    }
}

MyDao

@Dao
public interface DeckWithCardsDao {
    @Insert(onConflict = OnConflictStrategy.IGNORE)
    void add(CardsDeckRef cardsDeckRef);

    @Transaction
    @Query("SELECT * FROM cards INNER JOIN cards_deck_join" +
            " ON cards.id=cards_deck_join.cardId WHERE cards_deck_join.deckId =:deckId")
    LiveData<List<Card>> getCardsForDeck(final long deckId);

    @Query("DELETE FROM cards_deck_join WHERE cards_deck_join.deckId=:deckId ")
    void delete(final long deckId);

}

迈克

ON CASCADE DELETEonDelete = CASCADE如果删除了父级,则(即添加到表中的内容)将删除子级。如果有孩子,甚至所有孩子都被删除,它也不会删除父母。

而不是删除一个牌组以及与该牌组相关联的所有cards_deck_join行

@Query("DELETE FROM decks WHERE id=:deckId ")
void delete(final long deckId);

然后,删除卡片组将被向下层叠到cards_deck_join表中。


如果要自动删除卡片组,如果从cards_deck_join中删除后没有子节点,则可以使用TRIGGER例如

CREATE TRIGGER IF NOT EXISTS delete_empty_deck 
    AFTER DELETE ON card_deck_join
    BEGIN
        DELETE FROM decks 
            WHERE (SELECT count(*) FROM card_deck_join WHERE deckid = old.deckid) = 0 AND decks.id = old.deckid;
    END;
  • 由于会议室不支持生成触发器(据我所知,除了FTS确实会生成某些触发器时),您必须在会议室外部添加TRIGGER(例如,通过覆盖onCreate或callBack的callBack) OnOpen)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android Room-定义Room表名,ColumnInfo等时无法解析方法/符号

来自分类Dev

FROM 子句中的 Android Room 子查询未按预期工作

来自分类Dev

Android Room:样板代码

来自分类Dev

Android Room RxJava UndeliverableException

来自分类Dev

Android-Room Migration无法正确处理CREATE表

来自分类Dev

Unity Photon room.SetCustomProperties无法正常工作

来自分类Dev

Kotlin&Room:插入的返回ID无法正常工作

来自分类Dev

Android AccelerateDecelerateInterpolator无法正常工作

来自分类Dev

Android ScrollView无法正常工作

来自分类Dev

Android HttpResponseCache无法正常工作

来自分类Dev

Android mkdirs()无法正常工作

来自分类Dev

Android on Onclick无法正常工作

来自分类Dev

Android Listview无法正常工作?

来自分类Dev

Android weightsum无法正常工作

来自分类Dev

Android GeomagneticField无法正常工作

来自分类Dev

setTitle无法正常工作的Android

来自分类Dev

Android onConfigurationChanged无法正常工作

来自分类Dev

Android意向无法正常工作

来自分类Dev

Android TimePicker无法正常工作

来自分类Dev

httpPost无法正常工作的android

来自分类Dev

Android版式无法正常工作

来自分类Dev

android图形无法正常工作

来自分类Dev

Android setOnEditorActionListener无法正常工作

来自分类Dev

“ android:maxSdkVersion”无法正常工作

来自分类Dev

setTitle无法正常工作的Android

来自分类Dev

Android RadioGroup无法正常工作

来自分类Dev

Android Room @关系和索引

来自分类Dev

从greendao迁移到Android Room

来自分类Dev

laravel级联无法正常工作?