Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 何时从连接池获取/返回连接?_Jpa_Eclipselink_Connection Pooling - Fatal编程技术网

Jpa 何时从连接池获取/返回连接?

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

我有一个简单的JavaSE应用程序,它使用JPA(EclipseLink)。默认情况下,我有一个允许最多

假设我这样做:

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,会有区别吗

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

所以,它是这样的:

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知道可能需要一个事务,但不一定立即启动一个事务。