Play JPA EntityManager 是如何工作的?
How does Play JPA EntityManager work?
正在学习Play Framework,最近尝试将JPA与Play集成,搭建了一个简单的CRUD,但有几个问题。
以下是我们在 JPA 中执行的一些持久化操作的步骤。
1. Create EntityManager Factory.
2. Create EntityManager
3. Begining Transaction.
4. Persist data.
5. Commit Transaction.
6. Close EntityManager.
7. Close EntityManagerFactory
考虑以下代码片段
@Transactional(readOnly = true)
public Result getPersons() {
CriteriaBuilder cb = JPA.em().getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class);
Root<User> root = cq.from(User.class);
CriteriaQuery<User> all = cq.select(root);
TypedQuery<User> allQuery = JPA.em().createQuery(all);
JsonNode jsonNodes = toJson(allQuery.getResultList());
return ok(jsonNodes);
}
如上面的代码片段所示,我只是使用了 JPA.em() 而已。
我的问题是这是否处理了上述所有 7 个步骤,例如从 connectionFactory 获取连接、开始事务、提交和关闭连接等。
就这么简单吗,就JPA.em()?请解释一下这到底是如何工作的?关闭连接需要任何更多的编码,这样它就不会跨越数据源中配置的最大连接数,因为连接没有像上面的代码片段那样正确关闭。
您在示例中指定的数量超过 JPA.em()
。您还可以使用 @Transactional
注释来指定您的事务:用它来启动事务,并在块的末尾提交事务。此外,您还可以在应用的 application.conf
和 conf/META-INF/persistence.xml
中配置 JPA。所以,Play 拥有它需要的一切:
- 创建 EntityManager 工厂:在启动期间由 Play Framework 完成
- 创建 EntityManager:由 Play 框架处理
- 开始交易:通过@Transactional 注释或 JPA.em().withTransaction
处理
- 持久数据:通过 persist(myEntity) 或 merge(myEntity) 完成
- 提交事务:通过@Transactional 注释或 JPA.em().withTransaction
处理
- 关闭 EntityManager:由 Play 框架处理
- 关闭 EntityManagerFactory:在关闭期间由 Play Framework 完成
正在学习Play Framework,最近尝试将JPA与Play集成,搭建了一个简单的CRUD,但有几个问题。 以下是我们在 JPA 中执行的一些持久化操作的步骤。
1. Create EntityManager Factory.
2. Create EntityManager
3. Begining Transaction.
4. Persist data.
5. Commit Transaction.
6. Close EntityManager.
7. Close EntityManagerFactory
考虑以下代码片段
@Transactional(readOnly = true)
public Result getPersons() {
CriteriaBuilder cb = JPA.em().getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class);
Root<User> root = cq.from(User.class);
CriteriaQuery<User> all = cq.select(root);
TypedQuery<User> allQuery = JPA.em().createQuery(all);
JsonNode jsonNodes = toJson(allQuery.getResultList());
return ok(jsonNodes);
}
如上面的代码片段所示,我只是使用了 JPA.em() 而已。 我的问题是这是否处理了上述所有 7 个步骤,例如从 connectionFactory 获取连接、开始事务、提交和关闭连接等。
就这么简单吗,就JPA.em()?请解释一下这到底是如何工作的?关闭连接需要任何更多的编码,这样它就不会跨越数据源中配置的最大连接数,因为连接没有像上面的代码片段那样正确关闭。
您在示例中指定的数量超过 JPA.em()
。您还可以使用 @Transactional
注释来指定您的事务:用它来启动事务,并在块的末尾提交事务。此外,您还可以在应用的 application.conf
和 conf/META-INF/persistence.xml
中配置 JPA。所以,Play 拥有它需要的一切:
- 创建 EntityManager 工厂:在启动期间由 Play Framework 完成
- 创建 EntityManager:由 Play 框架处理
- 开始交易:通过@Transactional 注释或 JPA.em().withTransaction 处理
- 持久数据:通过 persist(myEntity) 或 merge(myEntity) 完成
- 提交事务:通过@Transactional 注释或 JPA.em().withTransaction 处理
- 关闭 EntityManager:由 Play 框架处理
- 关闭 EntityManagerFactory:在关闭期间由 Play Framework 完成