Я верю, что Hibernate 5 делает

 Я создаю приложение Multitenant SaaS и выбрал единую базу данных с общей схемой в качестве подхода Multitenancy. Каждая таблица имеет столбец дискриминатора «tenantId», чтобы изолировать данные клиента. Я использую Spring Boot в качестве основы приложения и использую JPA-данные для уровня данных с Hibernate в качестве поставщика JPA. Мне очень нравится, как данные Spring помогают устранить шаблонный код, и в настоящее время я закодировал репозитории, как показано ниже:

@Repository
public interface UserRepository extends JpaRepository<User,Long>{

}

и услуги, как показано ниже,

public class UserService{
    @Autowired
    private UserRepository userRepo;
    public User getUser(){
        User user = userRepo.findOne(id);
    }
}

Постановка задачи: Когда я хочу получить пользователя, я хочу получить пользователя для конкретной организации. Мне интересно, как мне добавить критерии арендатора, я не хочу писать пользовательские реализации репозитория, так как это представит шаблонный код.

Попытки решения:

i) Hibernate Interceptor - onPrepareStatememt: это бесполезно, так как sql является строкой, и я не хочу делать манипуляции со строками.

ii) Включение фильтров гибернации с помощью Spring AOP: аннотированная сущность с @Filter и попытка установить фильтр в сеансе. Это не работает, так как аспект никогда не вызывается.

@AfterReturning(pointcut = "execution(* org.hibernate.jpa.internal.EntityManagerImpl.OpenSession(..))", returning = "session")
public void forceFilter(JoinPoint joinPoint, Object session) {

    Session hibernateSession = (Session) session;
    session.enableFilter("tenantFilter")
}

Фильтры гибернации звучат как многообещающий подход, но я как бы ударил стену, пытаясь найти рабочее решение. Я хотел бы знать, существует ли альтернативный подход для включения фильтра гибернации в сеансе, который данные Spring внутренне используют для запроса данных.

Ответы на вопрос(1)

Ваш ответ на вопрос