java - 是否可以多次注册单个 Hibernate 拦截器?

标签 java spring hibernate interceptor

问题是我有一个如下所示的 Hibernate 拦截器:

public class CustomInterceptor extends EmptyInterceptor {

    private String tenant;

    public CustomInterceptor(String tenant) {
        this.tenant = tenant;
    }

   @Override    
   public String onPrepareStatement(String sql) {
        String prepedStatement = super.onPrepareStatement(sql);
        if (tenant != null) {
            prepedStatement = prepedStatement.replaceAll("TABLE_NAME_1", "TABLE_" + tenant);
        }
        return prepedStatement;
    }  }

我可以在启动期间初始化上述拦截器,但我想要的是能够向不同的租户注册相同的拦截器,就像 Spring 拦截器允许的那样,如下所示:

registry.addInterceptor(new CustomInterceptor("tenant1")).addPathPatterns("/wow/tenant1");

registry.addInterceptor(new CustomInterceptor("tenant2")).addPathPatterns("/wow/tenant2");

registry.addInterceptor(new CustomInterceptor("tenant3")).addPathPatterns("/wow/tenant3");

我无法在 Hibernate 中注册多个拦截器,并且我不可能使用 Spring Interceptor,因为 Spring Interceptor 在我的情况下没有提供 Hibernate Interceptor 的功能(即 onPrepareStatement 能够在运行时更改表名称)。

任何人都可以建议如何在 Hibernate 中注册多个拦截器吗?我不确定 Hibernate 是否可以。

编辑:

答案(基于我的研究和实现): 在启动时注册多个拦截器,然后根据传入的请求模式定向到不同的拦截器是 Spring 提供的,Hibernate 不支持。

最佳答案

您可以引入 InterceptorProxy 来保存 CustomInterceptors 列表。

public class InterceptorProxy extends EmptyInterceptor {

    private List<CustomInterceptor> interceptors;

    public InterceptorProxy (List<CustomInterceptor>) {
        this.interceptors = interceptors;
    }

   @Override    
   public String onPrepareStatement(String sql) {
        String prepedStatement = super.onPrepareStatement(sql);
        for (CustomInterceptor ci:interceptors) {
             //your logic here
        }
        return prepedStatement;
    }  
}

关于java - 是否可以多次注册单个 Hibernate 拦截器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48315630/

相关文章:

spring ACL - 主体/SID 不是用户,而是另一个实体

java - 在 hibernate HQL 中指定连接条件 "ON columns"?

Spring JDBCTemplate VS Hibernate 在性能方面

java - 我应该更改模式以验证什么?

java - 无用的测试指令?

java - 将 for 循环更改为递归函数

java - 安装插件后无法在 Spring Tool Suite 3.6.1 中找到 Hibernate Tools

java - 如何使用悲观锁定处理 Hibernate 中的 "StaleObjectStateException"?

java - Spring 启动+JPA : Column name annotation ignored

java - 设计并实现在程序中实现星期几的类 Day