多个 DAO 的 Room runInTransaction

Room runInTransaction for multiple DAO

如何使用Room runInTransaction, 我有多个 table 要插入。

database.runInTransaction(() -> {
                        database.getMemberDAO().insert(response.body().getMembers());
                        database.getPostDAO().insert(response.body().getPosts());
                        database.getCommentDAO().insert(response.body().getComments());
                        database.getLikeDAO().insert(response.body().getLikes());
                        database.getPostImageDAO().insert(response.body().getPostImages());
                    });

我在 运行 此交易时遇到外键约束错误。 运行 逐行工作。但批量插入不适用于多个 table

已使用 try-catch-finally 修复

database.runInTransaction(() -> {
                        try {
                            database.getMemberDAO().insert(response.body().getMembers());
                        } catch (Exception e) {
                            e.printStackTrace();
                        } finally {
                            try {
                                database.getPostDAO().insert(response.body().getPosts());
                            } catch (Exception e) {

                                e.printStackTrace();
                            } finally {
                                try {
                                    database.getCommentDAO().insert(response.body().getComments());
                                } catch (Exception e) {
                                    e.printStackTrace();
                                } finally {
                                    try {
                                        database.getLikeDAO().insert(response.body().getLikes());
                                    } catch (Exception e) {
                                        e.printStackTrace();
                                    } finally {
                                        try {
                                            database.getPostImageDAO().insert(response.body().getPostImages());
                                        } catch (Exception e) {
                                            e.printStackTrace();
                                        } finally {
                                            database.endTransaction();

                                        }
                                    }
                                }
                            }
                        }

                    });