RESTful フロント エンドがデータベース内のエントリを生成し、cron 式に関連付けられたジョブがロジックを起動してレコードを処理する Web アプリがあります。私が持っている関係は
ユーザー 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 を使用してセッションを開く場合とは異なる動作が発生する理由を誰か教えてもらえますか?