Прежде всего, я хочу сказать, что мне очень нравится абстракция Spring Data и то, как она помогает мне унифицировать обработку на уровне персистентности приложения Spring.
Недавно я заметил, что вышел Spring Data JDB C, поэтому я решил использовать его в новом приложении Spring Boot (2.3.1). В моем случае использования у меня есть одна схема БД , содержащая две категории таблиц:
- Таблицы, используемые для хранения сущностей, используемых (более сложными) бизнес-логами c приложения. Я использую Spring Data JPA (с базовым Hibernate) для работы с ними.
- Таблицы, используемые для хранения простых записей данных с небольшим количеством связей между собой (например, записи данных, поступающие из внешних систем). Я решил использовать для них Spring Data JDB C, потому что JPA с одной стороны был бы ненужным перебором, а с другой стороны, я не хотел беспокоиться о низкоуровневом SQL для простых запросов.
Это была история, а теперь вопрос :). Я реализую bean-компонент Spring @Service
с транзакционным методом, используя @Transactional(propagation = Propagation.REQUIRES_NEW)
. Этот метод обслуживания внутренне использует репозитории Spring Data JPA и Spring Data JDB C для управления данными (CRUD). Я не использую аннотации @Transactional
в своих репозиториях JPA / JDB C (все по умолчанию). Мне интересно, используют ли модификации БД, которые я делаю через репозитории JPA, одну и ту же транзакцию БД с модификациями, которые я делаю через репозитории JDB C. Мне нужно, чтобы это было так.
Я знаю, что когда я хочу разделить одну транзакцию БД между обоими типами репозиториев, тогда требуется, чтобы оба репозитория использовали одно и то же соединение с БД. Таким образом, каким-то образом репозиторий Spring Data JDB C должен использовать то же соединение с БД, что и EntityManager
(Hibernate Session
), используемое Spring Data JPA. Можно ли это каким-то образом достичь или это работает из коробки? Не могли бы вы помочь мне понять, как это работает внутри? Заранее большое спасибо!