Jpa 何时从连接池获取/返回连接?
我有一个简单的JavaSE应用程序,它使用JPA(EclipseLink)。默认情况下,我有一个允许最多 假设我这样做:Jpa 何时从连接池获取/返回连接?,jpa,eclipselink,connection-pooling,Jpa,Eclipselink,Connection Pooling,我有一个简单的JavaSE应用程序,它使用JPA(EclipseLink)。默认情况下,我有一个允许最多 假设我这样做: EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("myPU"); //read EntityManager em = emFactory.createEntityManager(); TypedQuery<Entity.class> q = em.createQue
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();
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
EntityManagerFactory emFactory=Persistence.createEntityManagerFactory(“myPU”);
//阅读
EntityManager em=emFactory.createEntityManager();
TypedQuery q=em.createQuery(“从实体e中选择e”,实体.class);
List entities=q.getResultList();
em.close();
//写
em=emFactory.createEntityManager();
实体e=新实体();
em.getTransaction().begin();
em.e;
em.getTransaction().commit();
em.close();
- 何时实际从连接池请求连接,何时再次释放连接
- 一个查询可以从池中请求多个连接吗
- 如果我将最大连接数从32设置为1,会有区别吗
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();
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
EntityManagerFactory emFactory=Persistence.createEntityManagerFactory(“myPU”);
//阅读
EntityManager em=emFactory.createEntityManager();
TypedQuery q=em.createQuery(“从实体e中选择e”,实体.class);
List entities=q.getResultList();默认情况下,连接是在EclipseLink中延迟获得的,不过也可以对其进行配置。使用默认配置,读取连接会立即释放回池,因此getResultList将获取并释放连接。对于写操作,它们也是延迟获取的,因此提交操作将同时获取和释放写连接——我相信begin()让EclipseLink知道可能需要一个事务,但不一定立即启动一个事务。