首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >玩!框架立即保存?

玩!框架立即保存?
EN

Stack Overflow用户
提问于 2011-12-13 11:38:36
回答 3查看 5.3K关注 0票数 11

在玩中!如果你这样叫它:

代码语言:javascript
运行
AI代码解释
复制
void method()
{
User u = User();
u.name = "bob";
u.save();
while(true){/* endless loop */}
}

实际上不会将任何内容保存到数据库中(播放!类需要拿回手才能刷新保存。)

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-13 12:27:01

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

代码语言:javascript
运行
AI代码解释
复制
void method()
{
    User u = User();
    u.name = "bob";
    u.save();
    JPA.em().flush();
    JPA.em().getTransaction().commit();

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

}

如果你想在无限循环内部或之后访问你的数据库(如果你有一个中断条件),你将不得不begin一个新的事务,否则你会得到来自hibernate的异常。像这样做

代码语言:javascript
运行
AI代码解释
复制
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.
}

重要的是,在循环中使用commitrollback事务,如果您在那里启动它,否则很快就会遇到太多打开事务的问题。

票数 15
EN

Stack Overflow用户

发布于 2011-12-13 11:57:59

正如Andrei Bodnarescu所说,您可以使用JPA.em().flush()User.em().flush()显式刷新持久性上下文。

但是,请注意,这样做不会使保存的实体立即可用于其他事务,因为应该首先提交当前事务。您可以将当前事务作为JPA.em().getTransaction().commit()提交。

票数 5
EN

Stack Overflow用户

发布于 2011-12-13 11:47:02

试一试

代码语言:javascript
运行
AI代码解释
复制
User.em().flush();

如果我没记错的话,是默认的播放!模型包含对EntityManager的引用,可以像这样访问它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8488565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档