Как правильно использовать Spring MVC с Hibernate в DAO, сервисной архитектуре - PullRequest
8 голосов
/ 25 января 2012

Я использую Spring MVC с Hibernatedaosupport для своих классов DAO.Не знаете, где начать транзакцию, должна ли она быть на уровне обслуживания или на уровне DAO?

Мое представление взаимодействует с уровнем обслуживания.DAO внедряются в сервисы.

Как правильно использовать Spring MVC с Hibernate в DAO, архитектуре сервисного уровня?

Ответы [ 3 ]

21 голосов
/ 25 января 2012

ИМХО транзакции должны идти на сервисный уровень. Обычно одна бизнес-транзакция состоит из нескольких запросов и обновлений. Если вы поместите @Transactional только на уровень DAO, каждый запрос и обновление будут выполняться в отдельной транзакции, что фактически отрицательно сказывается на назначении транзакций.

Но если сервисами являются @Transactional, каждое взаимодействие с базой данных объединяет одну основную транзакцию, начинающуюся, когда веб-слой входит в слой служб. Обратите внимание, что в этом случае, если веб-слой запускает несколько сервисных методов, каждый из них будет выполняться в отдельной транзакции (та же проблема смещена на один уровень вверх). Но размещение @Transactional в веб-слое может привести к неожиданным побочным эффектам, таким как проблема N + 1, которая была бы обнаружена в противном случае. Поэтому попытайтесь сохранить одну бизнес-транзакцию в одном сервисном методе, вызываемом из веб-слоя.

0 голосов
/ 08 февраля 2018

Существует полная информация для уровней обслуживания, уровня DAO, сущностей и контроллеров. Он имеет полное руководство с кратким описанием для каждого модуля.

Сайт: Spring MVC с Hibernate CRUD

Или Вы можете посетить канал YouTube: Spring MVC с Hibernate CRUD VIDEO

0 голосов
/ 25 января 2012

Очевидно слой DAO. Все, что подключается к уровню доступа к данным, должно быть на уровне DAO и (предпочтительно) аннотировано @Repository, а ваша служба (аннотированная @Service) должна иметь дескриптор экземпляра DAO.

Служба может вызывать несколько DAO, но не наоборот. Объекты DAO должен быть атомным по своей природе.

Если вы начинаете транзакцию, то, по моему мнению, она должна быть на уровне обслуживания, что поддерживает мое предыдущее утверждение, в котором я упоминаю, что DAO должны быть атомарными по своему характеру.

...