【问题标题】:persistence in servletservlet 中的持久性
【发布时间】:2012-05-31 08:20:04
【问题描述】:

我们不能在 Servlet 中使用 EntityManager 吗?像这样:

@WebServlet(name = "ServletPrincipal", urlPatterns = { "/test" })
public class ServletPrincipal extends HttpServlet {


    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {


EntityManagerFactory emf = Persistence.createEntityManagerFactory("todo");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
for (int i = 0; i < 10; i++) {
Voiture car = new Voiture(0, "b", "c");
em.persist(car);
}

em.getTransaction().commit();

Query q1 = em.createQuery("SELECT COUNT(v) FROM Voiture v");
System.out.println("Le nombre d'enregistrement: "
+ q1.getSingleResult());

TypedQuery<Voiture> query = em.createQuery("SELECT v FROM Voiture v",
Voiture.class);
List<Voiture> results = query.getResultList();
for (Voiture p : results) {
System.out.println(p.getMatricule());

}
// Close the database connection:
em.close();
emf.close();

    }

}

如果不能,那么如何在一个 servlet 中使用持久性?

为什么?

我使用 tomcate7、servlet3、jpa2 和 java EE 6 非常感谢

【问题讨论】:

标签: jakarta-ee jpa persistence entitymanager servlet-3.0


【解决方案1】:

在 Servlet 中使用 EntityManager 非常好。

因为您的 servlet 可以(并且可能会)同时处理多个请求,并且 EntityManager 不是线程安全的,所以您不应将 entityManager 的实例分配(也不注入)到 servlet 中的字段。

您可以并且可能应该做的是只创建一次 EntityManagerFactory 的实例并重用它。 EntityManagerFactory 是创建成本高昂的对象,将其用于同时请求很好,因为它是线程安全的。

如果这个 servlet 只是你需要这个持久性单元的地方,你可以例如在 servlet 的 init-method 中打开 EntityManagerFactory 并在 destroy-method 中关闭它。

【讨论】:

    【解决方案2】:

    通常,将持久性代码保留在控制器 servlet 中并不是一个好主意。但要回答您的问题,正如 @Mikko Maunu 所说,您可以在 servlet 中使用实体管理器。

    【讨论】:

      【解决方案3】:

      使用@PersistenceContext 和@PersistenceUnit 来传递对EntityManager 和EntityManagerFactory 的引用也是一个好主意。还要考虑 EMFactory 是线程安全的,而 EM 不是。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-15
        • 2010-09-26
        • 2013-10-29
        • 2015-04-08
        • 2013-07-17
        • 2016-11-04
        • 2019-01-08
        • 2020-07-20
        相关资源
        最近更新 更多