【发布时间】:2012-05-16 17:40:38
【问题描述】:
我有一个我想向其发送邀请电子邮件的用户列表,在我发送电子邮件后,我想将该人保存在一个单独的表中,这样以防服务器出现故障,我们将不会发送双重电子邮件,因为我们知道谁是我们发送电子邮件的最后一个人。这是代码:
@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();
但这也不行
* 我还想补充一点,该方法是从 Job 而不是从 Controller 运行的。
【问题讨论】:
标签: java jpa playframework