【发布时间】:2013-01-30 16:50:08
【问题描述】:
假设我有一个EntityManager 对象em,并且我有以下伪代码:
@PersistenceContext(unitName = "myPU")
private EntityManager em;
public void runQuery()
{
for(int i=0; i<100; i++)
{ Query q = em.createNativeQuery(someQuery);
List list = q.getResultList();
//process result
...
...
}
}
entityManager 是如何管理底层数据库连接的?上述代码是否只有 1 个连接会话或 100 个会话?
我问的原因是,对于每个连接会话,我需要在运行查询之前创建一个临时表。我想做的是这样的:
for(int i=0; i<100; i++)
{ //first check if temp table does not exist
createTemptTable;
// then run the query
Query q = em.createNativeQuery(someQuery);
List list = q.getResultList();
//process result
...
...
}
但我如何确定它将在同一个会话中创建表并运行查询?
【问题讨论】:
-
JPA 中没有会话,你的意思是事务吗?
-
我的意思是数据库连接会话。就像在 jdbc 中一样,您将拥有: Connection conn = DriverManager.getConnection(...) 然后 conn.close();所以每个连接都算作一个会话。
-
这取决于很多变量 - 请阅读here。
标签: java jakarta-ee jpa