Внедрение нескольких дао в один сервис - PullRequest
1 голос
/ 07 декабря 2011

если у меня есть несколько 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 ]

3 голосов
/ 07 декабря 2011

Вы бы просто внедрили все DAO таким же образом, как вы это обычно делаете, т.е. установщик или конструктор, используя @Inject или @ Autowired.

Затем вы аннотируете свой метод обслуживания как Транзакционный и вызываете необходимые операции для нескольких DAO. Транзакция будет охватывать все вызовы дао внутри нее.

@Transactional
public void doStuff() {
  dao1.doStuff();
  dao2.doStuff();
}
1 голос
/ 07 декабря 2011

Вы должны открыть транзакцию перед использованием первого дао (например, с @Transactional).

public class MyService{

  @Inject
  Dao1 dao1;

  @Inject
  Dao2 dao2;

  @Transactional
  public doStuffInOneTransaction{
     Object x = dao1.load();
     Object y = doSomething(x);
     dao2.save(y);
  }
}
0 голосов
/ 07 декабря 2011

Вы используете JTA?Вы осуществляете свои транзакции самостоятельно?Пожалуйста, предоставьте больше информации о вашей архитектуре, чтобы мы могли ответить соответствующим образом.

РЕДАКТИРОВАТЬ: Проверьте это, например: http://community.jboss.org/wiki/OpenSessionInView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...