招待メールを送信したいユーザーのリストがあります。メールを送信した後、その人を別のテーブルに保存して、サーバーがダウンした場合に、誰が知っているので二重のメールを送信しないようにします。私たちがメールを送った最後の人でした。これはコードです:
@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();
しかし、それも機能していません
*メソッドがコントローラーからではなく、ジョブから実行されていることも追加したいと思います。