Некоторые из примеров в Интернете используют аннотацию @Transactional
для методов реализации DAO, а некоторые используют эту аннотацию для методов уровня сервиса. Куда лучше поставить @Transactional
и почему?
Аналогично куда поставить аннотацию @Repository
. На интерфейсе DAO или на реализации DAO?
Я всегда использовал аннотации @Service
и @Repository
в их реализациях, но их можно вставить в любую из них. Хотя размещение его в интерфейсе будет означать, что у вас не будет больше одной реализации, потому что вы получите ошибку NoUniqueBeanDefinitionException
.
В случае с @Transactional
это зависит, но обычно это идет на службу. Если вы хотите иметь возможность добавлять различные вызовы БД в одну транзакцию, тогда она должна идти в сервисе. Если вы хотите совершать небольшие транзакции, тогда лучше всего будет использовать DAO, но тогда вы не сможете изменить несколько таблиц за одну транзакцию. Еще один недостаток его использования в DAO заключается в том, что вы не сможете откатить несколько модификаций, а только те, которые выполняются Bing DAO.