gpt4 book ai didi

spring - 使用 JPA EntityManagerFactory 和 Spring 的 Hibernate 过滤器

转载 作者:行者123 更新时间:2023-12-02 09:02:47 25 4
gpt4 key购买 nike

我有一个 jersey + spring 应用程序,它使用 EntityManagerFactory 和 spring JpaTransactionManager 来处理数据库操作。 JPA 实现是 hibernate。

我想知道有没有办法在这种情况下启用 hibernate 过滤器。

我尝试扩展 org.springframework.orm.jpa.JpaTransactionManager 并覆盖

@Override
protected EntityManager createEntityManagerForTransaction() {
EntityManager manager = super.createEntityManagerForTransaction();

Session session = manager.unwrap(Session.class);

return manager;
}

但我不确定这个方法是否在正确的位置调用。

编辑:我正在使用 spring JpaRepositories 来持久化/查询实体。

最佳答案

我找到了这个问题的答案。似乎其他人仍在为此苦苦挣扎,我将发布我的解决方案。

我正在标记为@Transactional(这很重要)的业务服务方法中启用我需要的过滤器。

在您的服务中,注入(inject)实体管理器工厂:

 @Autowired
private EntityManagerFactory entityManagerFactory;

在 @Transactional 方法内部从 transactionManager 获取实体管理器,将其解包到 hibernate session 并启用您需要的过滤器。这是按如下方式完成的:

    //Obtain the entity manager for the current transaction
EntityManagerHolder holder = (EntityManagerHolder) TransactionSynchronizationManager.getResource(entityManagerFactory);
EntityManager entityManager = holder.getEntityManager();

//Unwrap to get the underlying hibernate session
Session hibernateSession = entityManager.unwrap(Session.class);

//Configure your filters
Filter publishedAfterFilter = hibernateSession.enableFilter("...");
publishedAfterFilter.setParameter("...", ...);
publishedAfterFilter.validate();

关于spring - 使用 JPA EntityManagerFactory 和 Spring 的 Hibernate 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25972504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com