我正在学习Play Framework,最近我尝试将JPA与Play集成,构建了一个简单的CRUD,但我有几个问题。 以下是我们在JPA中遵循的一些持久性操作的步骤。
@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);
}
请考虑以下代码段
if (this.getWindow().getWindowManager().getDefaultDisplay()
.getOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
// portrait mode
} else if (this.getWindow().getWindowManager().getDefaultDisplay()
.getOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
// landscape
}
如上面的代码片段所示,我刚刚使用了JPA.em(),仅此而已。 我的问题是这是否会处理上述所有7个步骤,例如从connectionFactory获取连接,开始事务,提交和关闭连接等。
是这么简单,只是JPA.em()?请解释这是如何工作的?需要更多编码才能关闭连接,这样它就不会跨越数据源中配置的最大连接数,因为连接没有像上面的代码片段那样正确关闭。
答案 0 :(得分:6)
您在示例中指定了更多JPA.em()
。您还可以使用指定事务的@Transactional
注释:使用它来启动事务,并使用块的结尾提交事务。另外,您可以在应用的application.conf
和conf/META-INF/persistence.xml
中配置JPA。因此,Play拥有它所需的一切: