gpt4 book ai didi

java - 如何在for循环中保存jpa对象

转载 作者:行者123 更新时间:2023-11-30 04:47:30 25 4
gpt4 key购买 nike

我有一个用户列表,我想向其发送邀请电子邮件,在发送电子邮件后,我想将该人保存在单独的表中,这样万一服务器出现故障,我们就不会发送重复的电子邮件我们知道最后一个向我们发送电子邮件的人是谁。这是代码:

@play.db.jpa.NoTransaction
public void sendInvite() {
Long lastUser = (Long) User.find("select MAX(id) from User").fetch().get(0);
Long lastId = (Long) Contact.find("select MAX(id) from Contact").fetch().get(0);

for (i=lastContacted; i < totalNumUsers; i++) {
UserContact contact = new UserContact();
contact.firstName = user.firstName;
contact.lastName = user.lastName;
contact.email = user.email;
if (validateEmail(user) == false) {
continue;
}
sendInviteEmail(user);
saveContact(contact); //THIS DOESN'T TAKE PLACE UNTIL END OF THE LOOP
Thread.sleep(2000);
}
}

问题是保存的联系人直到 for 循环结束才保存在数据库中。我已经尝试过:

contact.em().persist(contact);
contact.em().flush();

但这也不起作用
* 我还想补充一点,该方法是从作业运行的,而不是从 Controller 运行的。

最佳答案

如果您在事务中执行所有这些操作,并且服务器出现故障,则事务将不会被提交,即使您在事务期间刷新,也不会向数据库写入任何内容。对于每一个联系人,您都需要打开一个新事务,将联系人保存在这个新事务中,然后提交事务。

关于java - 如何在for循环中保存jpa对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10623773/

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