TopLink не сохраняется
Мы используем TopLink 9.0.3.7 в нашем приложении Java. Недавно я добавил две новые таблицы, в которые я пытаюсь сохранить. Я сравниваю это с некоторыми похожими таблицами, которые сохраняются правильно, и все выглядит одинаково. Я сравнил дескрипторы, созданные TopLink Mappling WorkBench 9.0.3.5, и они тоже выглядят одинаково.
Из нашего класса действий
submissionDao.transaction(sessionInfo.getClerkReviewSubmission(),
new TransactionBlock<ClerkReviewSubmission>() {
public void merge(ClerkReviewSubmission detached,
ClerkReviewSubmission managed) {
ClerkReviewTask task = mergeTask(new ClerkReviewTask(),
myForm);
for(ClerkReviewCase crCase: sessionInfo.getClerkReviewSubmission().getCases()){
createCaseTask(crCase, task);
}
}
});
private final ClerkReviewCaseTask createCaseTask(ClerkReviewCase crCase,
ClerkReviewTask task) {
ClerkReviewCaseTask caseTask = new ClerkReviewCaseTask();
caseTask.setClerkReviewCase(crCase);
caseTask.setTask(task);
crCase.getCaseTasks().add(caseTask);
task.getCaseTasks().add(caseTask);
return caseTask;
}
Из нашего класса BaseDAO
public T transaction(T detached, TransactionBlock transactionBlock) throws BadDBConnection {
Session session = centralSourceInjector.inject();
UnitOfWork uow = session.acquireUnitOfWork();
try {
T managed = (T)uow.registerObject((T) detached);
transactionBlock.merge(detached, managed);
uow.commit();
session.refreshObject(detached);
return managed;
} catch(OptimisticLockException ole){
uow.rollbackTransaction();
throw ole;
} finally {
uow.release();
}
}
Когда я отлаживаюсь, я достигаю класса BaseDAO, и все, что я вижу в журналах:
UnitOfWork(3889394)- начало коммита единицы работы ClientSession(5022219)- соединение (7034305)- начало транзакции ClientSession(5022219)- соединение (7034305)- транзакция фиксации UnitOfWork(3889394)- принятие единицы работы UnitOfWork(3889394)- выпуск единицы работы
Любые предложения или рекомендации будут оценены.
1 ответ
Сотрудник просмотрел мой код и предложил добавить еще одну строку, и это решило проблему. Он предложил небольшое изменение в моем классе действий:
submissionDao.transaction(sessionInfo.getClerkReviewSubmission(),
new TransactionBlock<ClerkReviewSubmission>() {
public void merge(ClerkReviewSubmission detached,
ClerkReviewSubmission managed) {
ClerkReviewTask task = mergeTask(new ClerkReviewTask(),
myForm);
for (ClerkReviewCase crCase : sessionInfo
.getClerkReviewSubmission().getCases()) {
ClerkReviewCase crCase2 = managed.findCase(crCase
.getIcisCaseId());
createCaseTask(crCase2, task);
}
}
});
}