30449


関数のロジックは複数メソッド間に散らばっている場合、トランサクションスコープはどうですか？

下記例を考慮、functionA のempDao更新処理と
functionBのclassInfoDao更新処理は同一トランサクションですか？現在コーディングの条件は複数関数利用しないといけないので、なんかいい方法がありますか？

[code]

    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;
    }
    
[/code]


CC BY-SA 3.0
2016-11-16T05:28:15.333
30444
2016-11-16T11:46:42.773
7404
question
java orm
Doma 2.0 の トランザクション　スコープ


少しコードを変更していますが、次のように`TransactionManager#tm.required`に渡すラムダ式の中から`functionB`を呼び出すのであれば、`functionA`の`empDao`更新処理と`functionB`の`classInfoDao`更新処理は同じトランザクションで処理されます。

[code]

    void functionA() {
        TransactionManager tm = AppConfig.singleton().getTransactionManager();
        emp.setGroupNo("100");
        tm.required(() -> {
            empDao.update(emp);
            functionB(emp.getEmployeeNo(), emp.getGroupNo());
        });
    }
    
[/code]


CC BY-SA 3.0
2016-11-16T11:46:42.773
30449
2016-11-16T11:46:42.773
19412
30444
answer