簡體   English   中英

JPA是否為每個請求創建實體管理器工廠?

[英]JPA create entity manager factory for every request?

首先,我是JPA和Jax-rs的新手,我想開發一種休息服務。 因此,我創建了一個資源類並對其進行了注釋。

@Path("/companies")
public class CompanyResource {

private EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("test");

@GET
@Produces({MediaType.APPLICATION_JSON})
public List<Company> getCompanies() {
    EntityManager entityManager = entityManagerFactory.createEntityManager();

    return new ArrayList<>();
}

@GET
@Path("{companyId}")
@Produces({MediaType.APPLICATION_JSON})
public Company getCompany(@PathParam("companyId") int id) {

    return new Company();
}
}

根據我對CompanyResource每個客戶端請求實例創建jax-rs的理解,這意味着每次將創建新的EntityManagerFactory時,我認為這不是一個好主意,因為我只需要它來創建實體管理器,只能用一個實例來完成。 那么實現這一目標的正確方法是什么? 還是可以為每個請求創建該工廠的新實例?

PS我已經看到了一些使用@Stateless注釋並注入Entity Manager的示例,但是我想他們在那里使用了EJB (我可能是錯的),並且我現在不想深入到EJB

我認為您應該注入entitymanager本身(而不是工廠),並讓容器負責實例化和作用域。 我們通常要做的是

@Stateless
@Path("services")
public class MyServices {

  @PersistenceContext
  private EntityManager em;

// ... 

除了@Stateless (您應該使用哪一個恕我直言,無需為此而深入了解EJB),它實際上非常簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM