En mi humilde opinión las transacciones deben ir a la capa de servicio. Normalmente, una transacción comercial consiste en varias consultas y actualizaciones. Si coloca @Transactional
solo en la capa DAO, cada consulta y actualización se ejecutará en una transacción separada, lo que de hecho frustra el propósito de las transacciones.
Pero si los servicios son @Transactional
, cada interacción de base de datos se une a una transacción principal iniciada cuando la capa web entró en la capa de servicio. Tenga en cuenta que en este caso si la capa web ejecuta varios métodos de servicio, cada uno de ellos se ejecutará en una transacción separada (el mismo problema se desplazó un nivel). Pero colocar @Transactional
en la capa web podría introducir efectos secundarios inesperados como el problema N + 1, que de otro modo se hubiera detectado. Por lo tanto, trate de mantener una transacción comercial en un método de servicio llamado desde la capa web.
u puede explicar claramente ... –
@JustinThomas Eso es como útiles, pero diferente. –