У меня мультитенантное приложение. Это система управления школой. Приложение настроено для использования подхода 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);
оно работает.
Но мне интересно, верен ли это подход.
Я также не уверен, что это вызовет конфликты, когда несколько пользователей войдут в систему одновременно.
Может ли кто-нибудь помочь мне в этом?
Ваш подход должен работать, если вы создаете диспетчер сущностей для каждого запроса. Другой подход состоял бы в том, чтобы разделить ваш код на несколько запросов API, чтобы избежать этого.
У меня есть EntityManager @Autowired




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