我有一个我想向其发送邀请电子邮件的用户列表,在我发送电子邮件后,我想将该人保存在一个单独的表中,这样万一服务器出现故障,我们就不会发送双重电子邮件,因为我们知道谁是我们发送电子邮件的最后一个人。这是代码:
@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();
但这也不起作用
*我还想补充一点,该方法是从作业而不是从控制器运行的。