天天看點

JPA中為什麼EntityManager 的注解要用@PersistenceContext

在使用SpringJPA的時候,看到如下代碼

@PersistenceContext
 private EntityManager entityManager;
           

于是就有些好奇,這個@PersistenceContext是幾個意思,如果是實體注入的話,統一采用

@Autowired可以嗎?于是上網查了下,幾乎所有的EntityManager都是采用這個注解的,就去找了找原因。      
JPA中為什麼EntityManager 的注解要用@PersistenceContext

根據上面的描述,總結如下:

  1. @PersistenceContext是jpa專有的注解,而@Autowired是spring自帶的注釋
  2. EntityManager不是線程安全的,當多個請求進來的時候,spring會建立多個線程,@PersistenceContext就是用來為每個線程建立一個EntityManager的,而@Autowired隻建立了一個,為所有線程共用,有可能報錯
  3. 在使用EntityManager的時,請采用@PersistenceContext進行注解,而不要使用@Autowired