我有一个 Web 应用程序,其中一个 RESTful 前端在数据库中生成条目,并且一个使用 cron 表达式连接的作业触发逻辑来处理记录。我的关系是
用户 1 -> * 通知
发送通知时,它们会被删除。在极少数情况下,如果用户收到通知(要持久化),因为作业正在从通知列表中删除记录(发送后),我会在连接表上遇到约束冲突,其中连接列必须引用通知通知表。
public void deleteNotifsInUser(List<Notification> notifsToDelete, User user) {
if(user != null && notifsToDelete != null && notifsToDelete.size() > 0) {
if(log.isDebugEnabled()) {
log.debug(notifsToDelete);
}
Session session = sessionFactory.openSession();
User userInDb = (User) session.merge(user);
for (Notification n : notifsToDelete) {
Object notifInDb = session.merge(n);
userInDb.getNotifications().remove(notifInDb);
session.delete(notifInDb);
}
session.close();
}
}
谁能告诉我为什么在此方法上使用 @Transaction 会导致与使用 API 打开会话不同的行为?