1

休止状態3.5.4で春3を使用しています

1-トランザクションでオブジェクトを作成し、それをDBに保存したい(これは正常に通過します)。2-そのオブジェクト(同じオブジェクト)のいくつかのフィールドを更新し、別のトランザクションでDBを更新したい(ここに問題があります)。

問題は、最初のトランザクションでオブジェクトを正常に保存しますが、2 番目のトランザクションで DB で更新しないことです。

コード例は次のとおりです。

public String entry(String str){
    Bill b = create(str);
    b = update(b);
    b = updateAgain(b);

    return "DONE";
}

@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false)
public Bill create(String num){
    Bill bill = new Bill();
    bill.setBillNumber(num);
    baseDao.saveObject(bill);
    return bill;
}

@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false)
public Bill update(Bill bill){
    bill.setRetailAmount(152.0);
    baseDao.saveObject(bill);
    return bill;
}

注: メソッド「エントリ」に @transactional アノテーションを付けたくありません。

ありがとう、

4

1 に答える 1

1

同じクラス内のメソッドで呼び出された場合、アノテーションは有効になりません。AOPはプロキシを介してそれを傍受することはできません。エントリメソッドをクラスの外に移動します。

編集:Springは、プロキシまたはサブクラス化を使用したアノテーション駆動型AOPを介してトランザクションアノテーションを有効にします。プロキシで有効にすると、ローカルメソッド呼び出しでプロキシが見えなくなります。このブログ投稿には、写真付きの良い説明があります。

于 2013-01-22T14:54:23.200 に答える