其他分享
首页 > 其他分享> > 使用JPA EntityManagerFactory和Spring的休眠过滤器

使用JPA EntityManagerFactory和Spring的休眠过滤器

作者:互联网

我有一个使用EntityManagerFactory和spring JpaTransactionManager来处理数据库操作的泽西(spring)弹簧应用程序. JPA实现是休眠的.

我想知道是否有一种方法可以在这种情况下启用休眠过滤器.

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

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

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

    return manager;
}

但是我不确定在正确的位置调用此方法.

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

解决方法:

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

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

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

 @Autowired
 private EntityManagerFactory entityManagerFactory;

在@Transactional方法中,从transactionManager获取实体管理器,将其解包以休眠会话并启用所需的过滤器.这样做如下:

    //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-data-jpa,jpa,hibernate,hibernate-filters,spring
来源: https://codeday.me/bug/20191121/2050255.html