jpa - 玩!框架立即保存?

标签 jpa playframework

在玩!如果你这样称呼:

void method()
{
User u = User();
u.name = "bob";
u.save();
while(true){/* endless loop */}
}

实际上没有任何东西会被保存到数据库中(Play!类需要拿回手来刷新保存。)

我必须如何进行才能强制刷新或使其在保存时自动刷新?

最佳答案

您的更改在数据库中不可见的原因是该事务尚未提交,因此其他事务无法提交 您的更改(至少在像 PostgreSQL、Oracle、MSSQL、DB2 这样的好数据库中)。
要使您的更改可见,您必须在事务进入无限循环之前提交事务,如下所示:

void method()
{
    User u = User();
    u.name = "bob";
    u.save();
    JPA.em().flush();
    JPA.em().getTransaction().commit();

    while(true){/* endless loop */}

}

如果你想在无限循环内或之后访问你的数据库(如果你有中断条件),你必须开始 一个新的事务,否则你会从休眠中得到异常。这样做
void method()
{
    User u = User();
    u.name = "bob";
    u.save();
    JPA.em().flush();
    JPA.em().getTransaction().commit();

    while(true){
      // do some stuff

      /* TRANSACTIONAL BLOCK BEGINS */
      JPA.em().getTransaction().begin();
      try{
          // do some stuff
          // fetching, updating, deleting, whatever

          JPA.em().getTransaction().commit();
      }
      catch (Exception e)
      {
          // if an error occurs, rollback the transaction
          JPA.em().getTransaction().rollback();
      }
      /* TRANSACTIONAL BLOCK ENDS */
      // do some other stuff
    }
   // copy the TRANSACTIONAL BLOCK from above, if you want to do stuff after the "infinite loop" as well.
}

重要的是你要么提交 回滚 循环中的事务,如果你在那里开始它,否则你很快就会遇到太多未结事务的问题。

关于jpa - 玩!框架立即保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8488565/

相关文章:

java - Spring Boot 2.5.0、Spring Cloud 2020.0.2 和 Hibernate 5.4.31 - H2 数据库多行插入失败

java - 查找 JPA 的最新条目

java - 如何提高Spring Boot应用程序的性能

java - Play 框架 Controller 方法中抛出异常?

java - Play Framework - 删除对象后无法在 session 中找到用户 ID

java - 什么是适合 Java EE 应用程序的二级缓存?

java - 在 hibernate 中连接表时出错

mysql - 如何使用play框架在scala中的数据库中插入主键值?

security - 使用 cookie 和 java 创建非常安全的登录

playframework - Play 关于 anorm 与 slick 的 Scala 建议