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