Совместное использование одной транзакции БД репозиторием Spring Data JPA и репозиторием Spring Data JDB C - PullRequest
1 голос
/ 18 июня 2020

Прежде всего, я хочу сказать, что мне очень нравится абстракция Spring Data и то, как она помогает мне унифицировать обработку на уровне персистентности приложения Spring.

Недавно я заметил, что вышел Spring Data JDB C, поэтому я решил использовать его в новом приложении Spring Boot (2.3.1). В моем случае использования у меня есть одна схема БД , содержащая две категории таблиц:

  1. Таблицы, используемые для хранения сущностей, используемых (более сложными) бизнес-логами c приложения. Я использую Spring Data JPA (с базовым Hibernate) для работы с ними.
  2. Таблицы, используемые для хранения простых записей данных с небольшим количеством связей между собой (например, записи данных, поступающие из внешних систем). Я решил использовать для них 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. Можно ли это каким-то образом достичь или это работает из коробки? Не могли бы вы помочь мне понять, как это работает внутри? Заранее большое спасибо!

1 Ответ

0 голосов
/ 18 июня 2020

TL; DR: он должен работать почти сразу из коробки.

Spring Data JDB C использует JdbcTemplate под капотом. На самом деле это NamedParameterJdbcTemplate, но это не так важно.

Вооружившись этой информацией, становится очевидным, что этот вопрос содержит фактический ответ:

Какой менеджер транзакций мне следует использовать для шаблона JBD C При использовании JPA?

Завершить: пока у вас есть только один DataSource и создайте JpaTransactionManager для этого JPA и JDB C поделится сделками.

И с одним DataSource Spring Boot должен предоставить вам TransactionManager.

...