[英]How can I activate Hibernate @Filter in Spring boot?
我想要實現的最終目標是使用請求標頭中的一些信息在Hibernate 過濾器上使用。
webapp 是一個相當簡潔的 Spring 使用Jpa Repositories引導 webapp 。
我在 model 實體中配置了一個過濾器定義,我想在 webapp 上激活它。 我使用請求處理程序:
實體:
@Entity
@Getter
@Setter
@Table(name = "personas")
@FilterDef(name = "filtro_personas", parameters = @ParamDef(name = "idparam", type = "int"))
public class Persona implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Filter(name = "filtro_personas", condition = ":idparam = id")
private Integer id;
private String nombre;
@OneToMany(mappedBy ="persona")
private List<Wallet> cuentas;
}
請求處理程序:
public class LangHeaderInterceptor implements HandlerInterceptor {
private EntityManager entityManager;
public LangHeaderInterceptor( EntityManager entityManager) {
this.entityManager = entityManager;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
if (entityManager != null ) {
// Sample of use of the filter.at this point the HttpServletRequest and entity manager are filled.
Session s = entityManager.unwrap(Session.class);
s.enableFilter("filtro_personas").setParameter("idparam", 1).;
}
return true;
}
}
請求處理程序配置:
@Configuration
public class WebConfigurer implements WebMvcConfigurer {
@Autowired
private EntityManager entityManager;
@Override
public void addInterceptors(InterceptorRegistry registry) {
WebMvcConfigurer.super.addInterceptors(registry);
//System.out.println("TRACING MESSAGE: CUSTOM INTERCEPTOR ADDED");
registry.addInterceptor(new LangHeaderInterceptor(entityManager));
}
}
嘿,朋友,您不能以您嘗試的方式做到這一點,而不會引起關注。 您嘗試的 InterceptorRegistry 用法是一個奇怪的地方嘗試此操作(您不太可能在進入控制器方法的執行之前啟動事務)。
Springboot
對Hibernate
和Jpa
接口的使用使得實際的 session 在您的數據訪問上僅在@Transactional
注釋的上下文中真正可用。
您應該對您的意圖執行AOP 方法,以便捕獲事務/會話。
關於此事的一些鏈接:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.