我试着去理解,在 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的工作原理是一样的吗?
如果不是这样,那么这两个注解是如何工作的呢?
1条答案
按热度按时间cuxqih211#
@Autowired
以及@PersistenceContext
在使用上完全不同。@Autowired
要注入的spring注解是否有作用域(singleton
或者prototype
)在spring的ioc容器中创建的bean(或对象)。@PersistenceContext
jpa注解是一个容器,它定义了一组实体,对于每个持久性标识,都有一个唯一的实体示例。实体由持久性上下文管理。持久性上下文使用EntityManager
处理所有实体的整个生命周期,包括对数据库的crud操作。阅读此处了解更多信息