首页 文章

在Spring中从任意bean访问EntityMamanger [复制]

提问于
浏览
1

这个问题在这里已有答案:

如何从Spring Boot中的任意bean访问EntityManager?任意我的意思是不是服务或存储库bean . 我试过这个:

public class CriteriaFinder<T extends IdentityOwner> {
    // THIS DOES NOT WORKS
    @Autowired
    @PersistenceContext
    private EntityManager em;

    public  List<T> find(List<QueryParameter> parameters, Class<T> clazz) {

        if(em == null)
        {
            logger.error("Entity manager is null in finder");
            return null;
        }
        ...
    }
}

我尝试使用/不使用@Autowired和@PersistenceContext注释以及两者 .

(我想使用带有包含的条件查找器来实现自定义查找)

在自定义的@Repository实现中,我可以访问EntityManager:

public class CustomerRepositoryImpl implements CustomerFinderRepository {
    // THIS WORKS
    @PersistenceContext
    private EntityManager em;
    ...
}

我认为它与Spring发现和初始化bean的方式有关 . 我还想避免使用构造函数或setter传递EntityManager .

1 回答

  • 0

    你可以在任何类中注入 @PersistenceContext 和任何Spring bean,而这个类是一个Spring bean .
    您有一些绕过此规则的提示 . 例如,通过使用 ApplicationContextAware 但这只应在角落情况下使用 .

    因此,将 CriteriaFinder 设为Spring bean或将其传递给构造函数中的 EntiyManager as参数 .
    如果您想在操作 EntiyManager 实例时利用事务管理等Spring功能,建议采用第一种方法 .

相关问题