gpt4 book ai didi

java - 使用spring手动事务管理获取EntityManager

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:44:56 24 4
gpt4 key购买 nike

我依赖于 PlatformTransactionManager(实际上是 JpaTransactionManager)。我可以使用 TransactionTemplate 在事务中执行操作。但我不知道如何检索 EntityManager 以供使用。

@Autowired PlatformTransactionManager transactionManager;

void doSomething() {
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
EntityManager entityManager = ???;
// do work
}
});
}

相关配置如下:

@Bean
public DataSource dataSource() { ... }

@Bean
public FactoryBean<EntityManagerFactory> entityManagerFactory() {
LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();
entityManagerFactory.setDataSource(dataSource());
...
return entityManagerFactory;
}

@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(entityManagerFactory);
return jpaTransactionManager;
}

最佳答案

有一个类叫做EntityManagerFactoryUtils从哪里可以根据 EntityManagerFactory 获取当前事务的实体管理器您在 JpaTransactionManager 中配置.

例如:

JpaTransactionManager tm = context.getBean(JpaTransactionManager.class);
EntityManagerFactory emf = tm.getEntityManagerFactory();

TransactionTemplate template = new TransactionTemplate(tm);
template.execute(status -> {
EntityManager em = EntityManagerFactoryUtils.getTransactionalEntityManager(emf);
Department department = new Department();
department.setId(15);
department.setName("Engineering");
em.persist(department);
return department;
});

关于java - 使用spring手动事务管理获取EntityManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27270862/

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