gpt4 book ai didi

spring-data - 如何在自定义实现中访问 Spring Data 配置的实体管理器(工厂)

转载 作者:行者123 更新时间:2023-12-02 14:46:58 26 4
gpt4 key购买 nike

我正在为 Spring Data JPA 存储库编写自定义实现。所以我有:

  • MyEntityRepositoryCustom => 与自定义方法的接口(interface)
  • MyEntityRepositoryUmpl => 实现上述接口(interface)
  • MyEntityRepository => 扩展的标准接口(interface) JpaRepositoryMyEntityRepositoryCustom

我的问题是这样的:在 MyEntityRepositoryUmpl 的实现中我需要访问注入(inject)到 Spring Data 中的实体管理器。如何获得?我可以使用@PersistenceContext让它 Autowiring ,但问题是这个存储库必须在设置多个持久性单元的应用程序中工作。因此,要告诉 Spring 我需要哪一个,我必须使用 @PersistenceContext(unitName="myUnit") 。但是,由于我的存储库是在可重用服务层中定义的,因此我当时无法知道更高级别应用程序层将配置注入(inject)到我的存储库中的持久性单元的名称。

换句话说,我需要做的是访问 Spring Data 本身正在使用的实体管理器,但在(不太快)查看 Spring Data JPA 文档后,我找不到任何相关内容。

老实说,事实上 Impl类完全不知道 Spring Data,尽管在 Spring Data 手册中被描述为一个优点,但实际上每当您需要访问通常由 Spring Data 本身在自定义实现中提供的东西时(我想说,几乎总是...... )。

最佳答案

自 Spring Data JPA 1.9.2 版本起,您可以通过 JpaContext 访问 EntityManager,请参阅:http://docs.spring.io/spring-data/jpa/docs/1.9.2.RELEASE/reference/html/#jpa.misc.jpa-context 。示例:

@Component
public class RepositoryUtil
{
@Autowired
private JpaContext jpaContext;

public void deatach(T entity)
{
jpaContext.getEntityManagerByManagedType(entity.getClass()).detach(entity);
}
}

附注如果某个类有多个 EntityManager 候选项,则这种方法将不起作用,请参阅 JpaContext#getEntityManagerByManagedType -> DefaultJpaContext#getEntityManagerByManagedType 的实现。

关于spring-data - 如何在自定义实现中访问 Spring Data 配置的实体管理器(工厂),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27606905/

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