gpt4 book ai didi

java - 在 Spring boot 中从任意 bean 访问 EntityMamanger

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:37 24 4
gpt4 key购买 nike

如何从 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。

最佳答案

您可以在任何类中注入(inject)@PersistenceContext和任何Spring bean,而该类是一个Spring bean。
您有一些绕过此规则的技巧。例如,通过使用 ApplicationContextAware 但这应该仅在极端情况下使用。

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

关于java - 在 Spring boot 中从任意 bean 访问 EntityMamanger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47136071/

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