1
我有一個用戶列表,我想發送邀請電子郵件給我,在我發送郵件後,我想將該用戶保存在一個單獨的表中,以便服務器進入我們不會發送雙重電子郵件,因爲我們知道誰是我們發送電子郵件的最後一個人。這是代碼:如何將一個jpa對象保存在for循環中
@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();
,但不工作或者
*我也想補充一點,方法正在從工作,而不是從控制器上運行。
我也爲該方法設置了註釋@ play.db.jpa.NoTransaction,但它並不妨礙播放在事務中運行它。值得注意的是該方法在Job中運行,而不是從Controller中運行 – nightograph
問題不在於所有這些都在事務中運行。問題是每個聯繫人創建應該在自己的事務中。 –
我很欣賞一個例子,我如何在已定義的事務中創建單獨的事務? – nightograph