Como gerenciar 2 métodos DAO em uma única transação no Java Spring e Hibernate?
Estou criando um novo site dinâmico e criei 2 classes DAO no Spring MVC para gerenciar a consulta em 2 tabelas diferentes. Preciso saber como posso gerenciar 2 métodos DAO em uma única transação, usando o Hibernate ... Na prática, crio 2 classes Java DAO e a classe de implementação relacionada:
Primeira classe DAO (FirstDAOImpl.java):
@Transactional(readOnly = false, rollbackFor=Exception.class)
public void insertUser(User user)
{
//do insert an user using hibernate...
}
Segunda classe DAO (SecondDAOImpl.java):
@Transactional(rollbackFor=Exception.class)
public void insertUserRole(UserRole register)
{
//do insert user role using hibernate...
}
No meu controlador Spring, preciso chamar o método DAO em uma única transação ...
Na verdade, eu tenho um novo método transacional para qualquer método DAO:
@RequestMapping(value = "/new-user", method = RequestMethod.POST)
public String insertNewUser(Model model)
{
//Other code
try
{
firstDAO.insertUser(myUserObject);
secondDAO.insertUserRole(myUserRoleObject);
}
catch(Exception e)
{
logger.info("exception!");
}
//Other code
}
Quando o métodoinsertUserRole()
para inserir um novo registro falha, a transação para o método anteriorinsertUser()
é executado com sucesso sem reversão!
Como posso gerenciar esses 2 métodos em uma única transação? Eu manteria separa essas 2 operações ...
Obrigado! :)