2011-12-07 110 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); 
    } 
} 
相关问题