프로그래밍/Android

[Android] Room이 생성한 Dao 구현체 확인방법

Lou Park 2025. 12. 2. 00:58

오늘 @Upsert 어노테이션을 사용해서 Collection 데이터를 넘겼을때 과연 "트랜잭션처리가 되는가?"에 대해서 검증해야할 일이 있었다. Room을 당연한듯이 사용하고는 했지만 너무 추상화되어있어서 내부 동작을 알지 못했다. 당연히- 트랜잭션처리가 될거라고, 되어야만 한다고 생각했지만, 어림짐작으로 그치지 않고 코드로 확실하게 보고싶었다. 

 

PackageWhitelistDao_Impl

 

안드로이드 빌드를 한번 끝내면 generated/build에 내 Dao이름 + _Impl 이름으로 Dao의 구현체에대한 Java Class가 생성되어있는 것을 볼 수 있다. 

 

 

upsert 함수가 이렇게 트랜잭션으로 감싸져 있는것을 확인했고, Room에 대한 흐릿한 불신을 지울 수 있게 되었다.

@Override
  public Object upsert(final List<? extends WhitelistTableEntity> entities,
      final Continuation<? super List<Long>> $completion) {
    return CoroutinesRoom.execute(__db, true, new Callable<List<Long>>() {
      @Override
      @NonNull
      public List<Long> call() throws Exception {
        __db.beginTransaction();
        try {
          final List<Long> _result = __upsertionAdapterOfWhitelistTableEntity.upsertAndReturnIdsList(entities);
          __db.setTransactionSuccessful();
          return _result;
        } finally {
          __db.endTransaction();
        }
      }
    }, $completion);
  }



반응형