¿Cuál es la manera correcta de usar Spring MVC con Hibernate en DAO, architecture de capa de servicio

Estoy usando Spring MVC con Hibernatedaosupport para mis clases DAO. ¿Confundido aquí dónde comenzar la transacción, ya sea en la capa de servicio o en la capa DAO?

Mi vista interactúa con la capa de Servicio. Los DAO se inyectan en los servicios.

¿Cuál es la forma correcta de utilizar Spring MVC con Hibernate en DAO, architecture de capa de servicio?

En mi humilde opinión las transacciones deberían 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 ingresa a 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 presentar efectos secundarios inesperados como el problema N + 1, que de otro modo se habría detectado. Por lo tanto, trate de mantener una transacción comercial en un método de servicio llamado desde la capa web.

Obviamente, capa DAO. Todo lo que se conecta a la capa de acceso a datos debe estar en la capa DAO y (preferiblemente) anotado con @Repository y su servicio (anotado con @Service) debe tener un identificador para la instancia DAO.

Un servicio puede llamar múltiples DAO pero no al revés. Los DAO deben ser de naturaleza atómica.

Si está comenzando una transacción, entonces debería estar en la capa de servicio, en mi opinión, lo que respalda mi statement anterior, donde menciono que los DAO deben ser de naturaleza atómica.

Hay una información completa para las capas de servicio, la capa DAO, las entidades y los controladores. Tiene un tutorial completo con una breve descripción de cada módulo.

Sitio: Spring MVC con Hibernate CRUD

O puede visitar el canal de YouTube: Spring MVC con Hibernate CRUD VIDEO