1
我有一個Web應用程序,其中一個RESTful前端生成數據庫中的條目和一個與cron表達式連接的作業激發邏輯來處理記錄。我有關係是Hibernate的session.currentSession()與@Transactional錯誤while session.openSession()不
用戶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打開會話不同的行爲?
感謝您的回覆。但是經過進一步的測試,我注意到這種行爲並不是孤立於未註釋的事務。我想我需要爲用戶類添加@Version註釋,以檢測何時刪除通知並將其添加到用戶集合中。我相信它的工作方式是,當版本發生衝突並調用session.refresh()並重試時,我會捕獲異常? – Brian