gpt4 book ai didi

jpa - 玩!框架立即保存?

转载 作者:行者123 更新时间:2023-12-04 01:40:22 29 4
gpt4 key购买 nike

在玩!如果你这样称呼:

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com