Понедельник вечер, а я уже не соображаю.
Что я делаю не правильно? Кто знает Hibernate хорошо, может подскажете?
EntityManager em = entityManagerProvider.get();
em.getTransaction().begin();
Collections.sort(noticeDrafts, new Comparator<NoticeDraft>() {
@Override
public int compare(NoticeDraft d0, NoticeDraft d1) {
return d0.getId().compareTo(d1.getId());
}
});
Collections.sort(numberNotices, new Comparator<NumberNotice>() {
@Override
public int compare(NumberNotice n0, NumberNotice n1) {
return n0.getId().compareTo(n1.getId());
}
});
LOGGER.severe("Отсортированы ПИ: " + noticeDrafts.toString());
LOGGER.severe("Отсортированы ИИ: " + numberNotices.toString());
final Iterator<NoticeDraft> draftIterator = noticeDrafts.iterator();
final Iterator<NumberNotice> noticeIterator = numberNotices.iterator();
while (draftIterator.hasNext() && noticeIterator.hasNext()) {
final NoticeDraft draft = draftIterator.next();
final NumberNotice notice = noticeIterator.next();
draft.setStatusCode(NoticeDraft.DRAFT_STATUS_6_MUTATED);
draft.setMutatedBy(mutatedBy);
draft.setMutationDate(new Date());
draft.setNumberNoticeFk(notice);
em.merge(draft);
LOGGER.severe("Добавлен ИИ {" + draft.getNumberNoticeFk().getId() + "} к ПИ {" + draft.getId() + "}");
final NoticeDraftStatusChange statusChange = new NoticeDraftStatusChange();
statusChange.setNoticeDraft(draft);
statusChange.setModificationDate(new Date());
statusChange.setStatusCode(NoticeDraft.DRAFT_STATUS_6_MUTATED);
statusChange.setUsername(mutatedBy);
em.persist(statusChange);
}
em.getTransaction().commit();
В логе:
02-Jul-2018 19:58:09.407 SEVERE [http-nio-8080-exec-9] <вырезано>ServiceImpl.changePIstatusToMutated Добавлен ИИ {1479} к ПИ {76}
02-Jul-2018 19:58:09.411 SEVERE [http-nio-8080-exec-9] <вырезано>ServiceImpl.changePIstatusToMutated Добавлен ИИ {1480} к ПИ {77}
Но БД меня крутила на своём:
Id, Name, NumberNoticeFk
'76', '<вырезано>.117-18ПИ', NULL
'77', '<вырезано>.118-18ПИ', NULL
Почему после merge() и перед commit() сущность имеет ссылку на родителя (NoticeDraft на NumberNotice), а в БД ничего нема?
Интересно то, что если выполнять пошагово в отладчике, в БД всё прекрасно сохраняется и поле NumberNoticeFk не NULL, а соответствующий ID.
Софт, конечно, немножко устарел: MySQL 5.7, Hibernate 3.6.5, OpenJDK 8 (обновлена, но languageLevel установлен для проекта на 7).