使用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