我有这样的休眠过滤器:
@Entity
@FilterDef(name = "filter_name", parameters = { @ParamDef(name = "tenatId", type = "long") })
@Filter(name = "filter_name", condition = "tenant_id = :tenantId")
public class MyEntity {
private long tenantId;
}
Run Code Online (Sandbox Code Playgroud)
我想在每次请求到来时启用这个过滤器,所以我创建了这样的请求拦截器:
@Configuration
public class RequestInterceptor implements HandlerInterceptorAdapter {
@PersistenceContext
private EntityManager entityManager;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
Filter filter = entityManager.unwrap(Session.class).enableFilter("filter_name");
filter.setParameter("tenantId", myService.getTentantId());
}
}
Run Code Online (Sandbox Code Playgroud)
但我无法使用事务管理器,出现错误:
java.lang.IllegalStateException: No transactional EntityManager available
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:272)
at com.sun.proxy.$Proxy184.unwrap(Unknown Source)
at id.gdplabs.koi.api.config.security.RequestInterceptor.preHandle(RequestInterceptor.java:27)
at org.springframework.web.servlet.handler.WebRequestHandlerInterceptorAdapter.preHandle(WebRequestHandlerInterceptorAdapter.java:56)
at org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExecutionChain.java:134) …Run Code Online (Sandbox Code Playgroud)