Java 在事务中插入数据后,不更新Flowable

Java 在事务中插入数据后,不更新Flowable,java,rx-java2,android-room,Java,Rx Java2,Android Room,当我们在插入新的数据库行后使用FlowTable获取更新通知时,工作正常。 但是,当插入在另一个显式事务中完成时,Flowable不会收到通知 为了说明这个问题,我从android架构组件中派生了BasicRxJavaSample,并添加了两种测试方法 我们可以看到,此代码使用一个事务,我的测试代码也使用另一个事务。 根据文档,嵌套事务应该可以 这可能是房间里的虫子吗 此项目的房间版本是1.0.0-alpha3,但我也可以看到版本1.0.0-alpha8(在另一个项目中)存在此问题。这是房间中的

当我们在插入新的数据库行后使用FlowTable获取更新通知时,工作正常。
但是,当插入在另一个显式事务中完成时,Flowable不会收到通知

为了说明这个问题,我从
android架构组件
中派生了
BasicRxJavaSample
,并添加了两种测试方法

我们可以看到,此代码使用一个事务,我的测试代码也使用另一个事务。
根据文档,嵌套事务应该可以

这可能是房间里的虫子吗

此项目的房间版本是
1.0.0-alpha3
,但我也可以看到版本
1.0.0-alpha8
(在另一个项目中)存在此问题。

这是房间中的一个bug:

我验证了该错误已通过版本
1.0.0-rc1

修复。这是房间中的一个错误:


我验证了该错误已通过版本
1.0.0-rc1

修复,作为临时的黑客解决方法,我可以调用
mDatabase.getInvalizationTracker().RefreshVersionSync()
在Google issue tracker上的事务阻塞问题之后:作为临时的黑客解决方法,我可以调用
mDatabase.getInvalizationTracker().RefreshVersionSync()在Google issue tracker上的交易阻止问题之后:
@Test
public void testFlowable() {
    // When subscribing to the emissions of the user
    final TestSubscriber<User> userTestSubscriber = mDatabase.userDao().getUser().test();

    userTestSubscriber.assertValueCount(0);

    // When inserting a new user in the data source
    mDatabase.userDao().insertUser(USER);

    userTestSubscriber.assertValueCount(1);
}
@Test
public void testFlowableInTransaction() {
    // When subscribing to the emissions of the user
    final TestSubscriber<User> userTestSubscriber = mDatabase.userDao().getUser().test();

    userTestSubscriber.assertValueCount(0);

    // When inserting a new user in the data source
    mDatabase.beginTransaction();
    try {
        mDatabase.userDao().insertUser(USER);
        mDatabase.setTransactionSuccessful();

    } finally {
        mDatabase.endTransaction();
    }

    userTestSubscriber.assertValueCount(1);
    // this fails - the userTestSubscriber is still empty!
}
  public void insertUser(User user) {
    __db.beginTransaction();
    try {
      __insertionAdapterOfUser.insert(user);
      __db.setTransactionSuccessful();
    } finally {
      __db.endTransaction();
    }
  }