Q:

Doma 2.0 の トランザクション　スコープ

関数のロジックは複数メソッド間に散らばっている場合、トランサクションスコープはどうですか？
下記例を考慮、functionA のempDao更新処理と functionBのclassInfoDao更新処理は同一トランサクションですか？現在コーディングの条件は複数関数利用しないといけないので、なんかいい方法がありますか？
functionA() {
    TransactionManager tm = AppConfig.singleton().getTransactionManager();
    emp.setGroupNo("100");
    int updateResult = tm.required(() -> {
        return empDao.update(emp);
    };
    functionB(emp.getEmployeeNo(), emp.getGroupNo());
}

int functionB(String empNo, String groupNo) {
    TransactionManager tm = AppConfig.singleton().getTransactionManager();
    int updateResult = tm.required(() -> {
        int result = 0;
        List<ClassInfo> classList = classDao.selectById(empNo);
        for(ClassInfo class in classList) {
            class.setGroupNo(groupNo);
            result = classInfoDao.update(emp);
            if (result < 0) { break; }
        }
        return result;
    };
    return updateResult;
}

A:

少しコードを変更していますが、次のようにTransactionManager#tm.requiredに渡すラムダ式の中からfunctionBを呼び出すのであれば、functionAのempDao更新処理とfunctionBのclassInfoDao更新処理は同じトランザクションで処理されます。
void functionA() {
    TransactionManager tm = AppConfig.singleton().getTransactionManager();
    emp.setGroupNo("100");
    tm.required(() -> {
        empDao.update(emp);
        functionB(emp.getEmployeeNo(), emp.getGroupNo());
    });
}

