Sto cercando di ottenere un migliore controllo sull'utilizzo dell'attributo @Transactional di Spring. Capisco che fondamentalmente avvolge il contenuto del metodo contrassegnato come @Transactional in una transazione. Sarebbe opportuno contrassegnare un metodo di servizio/livello aziendale come transazionale, in contrasto con il metodo DAO effettivo, come ho fatto qui?Annotazione transazionale a molla
Servizio Attuazione
public class UserServiceImpl implements UserServiceInt{
@Autowired
private UserServiceDAO serviceDAO;
@Override
public User getUser(int id){
return serviceDAO.getUser(id);
}
@Override
@Transactional
public void updateUserFirstName(int id, String firstName) throws SomeException{
User userToUpdate = getUser(id);
if(userToUpdate == null){
throw new SomeException("User does not exist");
}
userToUpdate.setFirstName(firstName);
serviceDAO.updateUser(userToUpdate);
}
}
DAO Attuazione
public class UserServiceDAOImpl implements UserServiceDAOInt{
@PersistenceContext(unitName="myUnit")
private EntityManager entityManager;
@Override
public void updateUser(User user){
entityManager.merge(user);
}
}
io non sono nemmeno sicuro se la chiamata di unire è nemmeno necessario. In che modo Spring sa quale EntityManager utilizzare poiché non esiste un dichiarante EntityManager nella classe UserServiceImpl?
Sì, è proprio il caso di annotare un servizio o di servizi metodi come '@ Transactional' - ad esempio in caso il servizio comprende più di un DAO singolo. Inoltre, hai ragione, non devi chiamare esplicitamente fusione. L'oggetto User è già associato al contesto di persistenza (chiamando 'get()') e lo stato è sincronizzato con il DB alla fine della transazione. Unisci viene utilizzato per aggiornare un oggetto che è stato modificato al di fuori di una transazione –
un po 'di argomento per la tua domanda, ma potresti trovare pertinente, dai un'occhiata a http://projects.spring.io/spring-data-jpa/rimuoverà un sacco di codice boilerplate dal tuo livello DAO – Kajo
Controlla la mia risposta qui, forse ti sarà di aiuto http://stackoverflow.com/questions/30490924/what-data-is-stored-in-transaction/30494434# 30494434 – jgr