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);
                }
            }
        });
}
Другие вопросы по тегам