Изменить схему MySQL во время выполнения

У меня мультитенантное приложение. Это система управления школой. Приложение настроено для использования подхода Schema-Per-Tenant. Но это ограничено только одним доступом к схеме для каждого запроса. Я хочу использовать три разные схемы для каждого запроса.

У каждого пользователя есть две схемы и общая схема для всего приложения. Всего 3. Я хочу, чтобы мое приложение могло переключаться между всеми тремя схемами за один вызов отдыха. Например, если запрос на добавление нового ученика, ученик должен быть добавлен в SCHEMA_A, автоматически сгенерированная учетная запись пользователя для ученика должна быть добавлена ​​в COMMON_SCHEMA, а studentId должен быть добавлен к классу в SCHEMA_B. В настоящее время я использую

entityManager.createNativeQuery("USE SCHEMA_A").executeUpdate();
add(student);

entityManager.createNativeQuery("USE COMMON_SCHEMA").executeUpdate();
add(generateUserForStudent(student));

entityManager.createNativeQuery("USE SCHEMA_B").executeUpdate();
addStudentToClass(student);

оно работает.

Но мне интересно, верен ли это подход.

Я также не уверен, что это вызовет конфликты, когда несколько пользователей войдут в систему одновременно.

Может ли кто-нибудь помочь мне в этом?

На самом деле это не схема для каждого арендатора. Если бы это было так, вам не нужно было бы обращаться к нескольким схемам за один вызов.

Jason Armstrong 11.12.2018 12:22

Ваш подход должен работать, если вы создаете диспетчер сущностей для каждого запроса. Другой подход состоял бы в том, чтобы разделить ваш код на несколько запросов API, чтобы избежать этого.

Jason Armstrong 11.12.2018 12:26

У меня есть EntityManager @Autowired

Arul Rozario 11.12.2018 12:42
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
68
0

Другие вопросы по теме