2011-12-07 50 views
1

如果我有幾個的DAO注入到需要在單個事務中一起工作服務,我該怎麼辦呢?注入多個DAO成一個服務

@Component 
public class CallerClass{ 
@Autowired  
private TransactionClass1 class1; 
@Autowired  
private TransactionClass2 class2; 

public void saveOperation(){  
    try{ 
     class1.save(); 
     class2.save(); 
    }catch(Exception ex){ 
    } 
} 
} 

像上面的簡單代碼。然而,這段代碼是缺乏

回答

3

你只注入所有的DAO以同樣的方式,你通常做即,使用@Inject或@Autowired制定者或構造。

然後你註釋你的服務的方法事務和調用在多個DAO需要的操作。交易將包含其內的所有道數呼叫。

@Transactional 
public void doStuff() { 
    dao1.doStuff(); 
    dao2.doStuff(); 
} 
+0

好,doStuff()方法的類應該用@Component註解,對不對? – olyanren

+0

是的,如果你正在使用自動裝配要連接您的組件。我猜我以爲你是。你也可以使用新的@ Configuration/@ Bean或簡單的XMl。 –

1

您使用的第一道(例如帶@Transactional)之前,必須先打開事務。

public class MyService{ 

    @Inject 
    Dao1 dao1; 

    @Inject 
    Dao2 dao2; 

    @Transactional 
    public doStuffInOneTransaction{ 
    Object x = dao1.load(); 
    Object y = doSomething(x); 
    dao2.save(y); 
    } 
} 
相關問題