2

我有一个使用 JPA(EclipseLink) 的简单 Java SE 应用程序。默认情况下,我有一个“默认”连接池,最多允许32 个连接

假设我做这样的事情:

EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("myPU");

//read
EntityManager em = emFactory.createEntityManager();

TypedQuery<Entity.class> q = em.createQuery("Select e from Entity e", Entity.class);
List<Entity> entities = q.getResultList();

em.close();

//write
em = emFactory.createEntityManager();

Entity e = new Entity();
em.getTransaction().begin();
em.persist(e);
em.getTransaction().commit();

em.close();
  • 什么时候真正从连接池请求连接,什么时候再次释放?
  • 一个查询可以从池中请求多个连接吗?
  • 如果我将最大连接数从 32 设置为 1,会有区别吗?
4

1 回答 1

2

好吧,我不知道 EclipseLink 是如何工作的,但是在 Hibernate 中,您可以设置连接释放策略以在以下情况下释放连接到池:语句、事务、实体关闭、自动。链接 但是我找不到 EclipseLink 这样的东西,所以我假设 EclipseLink 发布连接策略是在 entity_close 之后。

所以,它会是这样的:

EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("myPU");

//read
EntityManager em = emFactory.createEntityManager();

TypedQuery<Entity.class> q = em.createQuery("Select e from Entity e", Entity.class);
List<Entity> entities = q.getResultList(); << TAKE FROM POOL

em.close(); << RELEASE

//write
em = emFactory.createEntityManager();

Entity e = new Entity();
em.getTransaction().begin(); << TAKE FROM POOL
em.persist(e);
em.getTransaction().commit();

em.close(); << RELEASE
于 2013-08-20T08:55:36.330 回答