Правильный способ получения транзакций с использованием простого сопоставления объекта / графа Spring Data Neo4j?

Я использую простое отображение объекта / графа в Spring Data Neo4j 2.0, где я выполняю операции сохранения, используя среду репозитория Spring Data. Я работаю с репозиториями, а не с Neo4jTemplate. Я вставляю репозитории в свои контроллеры Spring Web MVC, и контроллеры вызывают репозитории напрямую. (Нет промежуточного уровня обслуживания - мои операции обычно представляют собой CRUD и поисковые запросы.)

Когда я выполняю операции чтения, нет никаких проблем. Но когда я выполняю операции записи, я получаю NotInTransactionException. Насколько я понимаю, операции чтения в Neo4j не требуют транзакций, а операции записи требуют.

Как лучше всего представить транзакции здесь, если я хочу придерживаться простого OGM? Я хочу использовать @Transactional, но размещение его в различных интерфейсах репозитория не работает. Если я введу промежуточный уровень службы между контроллерами и репозиториями, а затем аннотирую компоненты службы с помощью @Transactional, тогда это сработает, но мне интересно, есть ли более простой способ сделать это. Без Spring Data у меня обычно был бы доступ к реализациям DAO (репозитория), поэтому я мог бы аннотировать конкретные DAO с помощью @Transactional, если бы я хотел избежать сквозного уровня обслуживания. В Spring Data репозитории создаются динамически, так что это не вариант.

5
задан Willie Wheeler 7 January 2012 в 20:09
поделиться