在Springbean中如何注入entitymanager?

6l7fqoea  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(278)

我试着去理解,在 Spring Bean 中注入完整的愤怒是如何起作用的。我有豆子

@Service
@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class TestUpdateService {

    @PersistenceContext
    private EntityManager entityManager;

    private final OrderRepository orderRepository;

    @Transactional
    public void doWork(Long id) {
        Order order = orderRepository.findById(id).get();
        entityManager.detach(order);
        orderRepository.save(order);
    }
}

还有几个问题:
对于我的事务方法dowork的每次调用,都将创建entitymanager的新示例,对吗?我在stackoverflow上读到(或误解了mb),用@persistancecontext注解的实体管理器为每个事务创建自己的entitymanager。
如果是这样,@autowired的工作原理是一样的吗?
如果不是这样,那么这两个注解是如何工作的呢?

cuxqih21

cuxqih211#

@Autowired 以及 @PersistenceContext 在使用上完全不同。 @Autowired 要注入的spring注解是否有作用域( singleton 或者 prototype )在spring的ioc容器中创建的bean(或对象)。 @PersistenceContext jpa注解是一个容器,它定义了一组实体,对于每个持久性标识,都有一个唯一的实体示例。实体由持久性上下文管理。持久性上下文使用 EntityManager 处理所有实体的整个生命周期,包括对数据库的crud操作。
阅读此处了解更多信息

相关问题