gpt4 book ai didi

java - JPA 为每个请求创建实体管理器工厂?

转载 作者:行者123 更新时间:2023-12-01 16:54:33 25 4
gpt4 key购买 nike

首先,我是 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();
}
}

根据我对 jax-rs 的理解,将创建 CompanyResource 的每个客户端请求实例,这意味着每次都会创建新的 EntityManagerFactory ,我猜这不是一个好主意,因为我只需要它来创建实体管理器,这只需它的一个实例即可完成。那么实现这一目标的正确方法是什么?或者可以为每个请求创建该工厂的新实例吗?

附注我见过一些例子,他们使用@Stateless注释并注入(inject)实体管理器,但我猜他们在那里使用EJB(我可能是错的),我不想现在就深入了解 EJB

最佳答案

我认为你应该注入(inject)实体管理器本身(而不是工厂),并让容器负责实例化和作用域。我们通常做的事情是这样的

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

@PersistenceContext
private EntityManager em;

// ...

除了@Stateless(恕我直言,您应该使用它,没有必要为此深入研究EJB),它实际上非常简单。

关于java - JPA 为每个请求创建实体管理器工厂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34787646/

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