#java #oracle #hibernate #session #transactions
Вопрос:
Я использую java и спящий режим, у меня есть метод, в котором я открываю транзакцию, получаю некоторые обновления и сохраняю сеанс, а затем фиксирую транзакцию. не всегда, но иногда при совершении транзакции сеанс или транзакция становятся нулевыми, есть ли для этого какая-либо причина? и как я могу это решить?
session.beginTransaction();
for (ThreadParticipant activatedThreadParticipant : activatedThreadParticipants) {
activatedThreadParticipant.setActive(true);
activatedThreadParticipant.setAuditor(false);
activatedThreadParticipant.setInviter(currentUser);
activatedThreadParticipant.setHistoryEndTime(null);
session.update(activatedThreadParticipant);
newParticipants.add(activatedThreadParticipant);
}
if (!newParticipants.isEmpty()) {
newParticipants.forEach(e -> CacheUtil.invalidateThreadParticipant(e.getMessageThread().getId(), e.getParticipant().getId()));
newParticipants.forEach(e -> CacheUtil.invalidateThreadParticipantById(e.getId()));
}
for (User participant : noDeplicatedUsers) {
Long checkExistanceCount = (Long) session.createQuery("select count(1) from ThreadParticipant where "
"participant.id = :pid and messageThread.id = :mtid")
.setParameter("pid", participant.getId())
.setParameter("mtid", messageThread.getId())
.uniqueResult();
if (checkExistanceCount == 0) {
newParticipants.add(createThreadParticipant(participant, false, auditor, currentUser, messageThread, contactType, session));
}
}
messageThread.getMembers().addAll(newParticipants);
session.update(messageThread);
session.commitTransaction();
Комментарии:
1. Без трассировки стека действительно трудно сказать, что происходит не так.