gpt4 book ai didi

spring - EntityManager bean 的 @Autowired 与 @PersistenceContext

转载 作者:IT老高 更新时间:2023-10-28 13:04:46 28 4
gpt4 key购买 nike

有什么区别:

@Autowired
private EntityManager em;

对比:

@PersistenceContext
private EntityManager em;

这两个选项都适用于我的应用程序,但我可以通过使用 @Autowired 注释来破坏某些内容吗?

最佳答案

您不应该使用 @Autowired@PersistenceContext 负责为每个线程创建一个唯一的 EntityManager。在生产应用程序中,您可以有多个客户端同时调用您的应用程序。对于每次调用,应用程序都会创建一个线程。每个线程都应该使用自己的 EntityManager。想象一下如果他们共享同一个 EntityManager 会发生什么:不同的用户会访问同一个实体。

usually the EntityManager or Session are bound to the thread (implemented as a ThreadLocal variable).

来源:https://stackoverflow.com/a/42074452/2623162

EntityManager instances are not thread-safe. 

来源:https://docs.oracle.com/cd/E19798-01/821-1841/bnbqy/index.html

请注意 @PersistenceContext 注解来自 javax.persistence 包,而不是来自 Spring 框架。在 JavaEE 中,JavaEE 容器(也称为应用服务器)使用它来注入(inject) EntityManager。 Spring 借用了 PersistenceContext 注释来做同样的事情:为每个线程注入(inject)一个应用程序管理的(= 不是容器管理的)EntityManager bean,就像 JavaEE 容器一样。

关于spring - EntityManager bean 的 @Autowired 与 @PersistenceContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31335211/

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