簡體   English   中英

如何在 Spring 引導中激活 Hibernate @Filter?

[英]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 用法是一個奇怪的地方嘗試此操作(您不太可能在進入控制器方法的執行之前啟動事務)。

SpringbootHibernateJpa接口的使用使得實際的 session 在您的數據訪問上僅在@Transactional注釋的上下文中真正可用。

您應該對您的意圖執行AOP 方法,以便捕獲事務/會話。

關於此事的一些鏈接:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM