将多个dao注入一个服务

时间:2011-12-07 11:26:57

标签: java hibernate spring

如果我要将几个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 个答案:

答案 0 :(得分:3)

您只需以与通常相同的方式注入所有DAO,即使用@Inject或@Autowired设置或构造函数。

然后,您将服务方法注释为Transactional,并在多个DAO上调用所需的操作。该交易将包含其中的所有dao调用。

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

答案 1 :(得分:1)

您必须在使用第一个dao之前打开该事务(例如使用@Transactional)。

public class MyService{

  @Inject
  Dao1 dao1;

  @Inject
  Dao2 dao2;

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

答案 2 :(得分:0)

你使用JTA吗?您是自己实施交易吗?请提供有关您的架构的更多信息,以便我们做出相应的回应。

编辑: 检查一下,例如: http://community.jboss.org/wiki/OpenSessionInView