diff --git a/src/main/java/org/olat/ims/qti21/repository/handlers/QTI21AssessmentTestHandler.java b/src/main/java/org/olat/ims/qti21/repository/handlers/QTI21AssessmentTestHandler.java index ab1be66993cdf218c1937c2f170bec88e8378c94..6010b463379fb6eef1049367ab008212dfdb4be3 100644 --- a/src/main/java/org/olat/ims/qti21/repository/handlers/QTI21AssessmentTestHandler.java +++ b/src/main/java/org/olat/ims/qti21/repository/handlers/QTI21AssessmentTestHandler.java @@ -86,7 +86,6 @@ import org.olat.ims.qti21.ui.AssessmentTestDisplayController; import org.olat.ims.qti21.ui.QTI21AssessmentDetailsController; import org.olat.ims.qti21.ui.QTI21RuntimeController; import org.olat.ims.qti21.ui.editor.AssessmentTestComposerController; -import org.olat.modules.assessment.manager.AssessmentEntryDAO; import org.olat.modules.qpool.model.QItemList; import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; @@ -127,8 +126,6 @@ public class QTI21AssessmentTestHandler extends FileHandler { @Autowired private QTI21QPoolServiceProvider qpoolServiceProvider; - @Autowired - private AssessmentEntryDAO assessmentEntryDAO; @Autowired private AssessmentTestSessionDAO assessmentTestSessionDao; @@ -462,7 +459,6 @@ public class QTI21AssessmentTestHandler extends FileHandler { public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) { boolean clean = super.cleanupOnDelete(entry, res); assessmentTestSessionDao.deleteAllUserTestSessions(entry); - assessmentEntryDAO.deleteEntryForReferenceEntry(entry); return clean; } diff --git a/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java b/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java index 27e497a7dd77b7ab945f9b229670c11aa14a98ac..b4192c06797b45dc1f2eff8f327aaa17fcb184a2 100644 --- a/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java +++ b/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java @@ -272,9 +272,9 @@ public class AssessmentEntryDAO { * @param entry * @return */ - public int deleteEntryForReferenceEntry(RepositoryEntryRef entry) { + public int removeEntryForReferenceEntry(RepositoryEntryRef entry) { StringBuilder sb = new StringBuilder(); - sb.append("delete from assessmententry data where data.referenceEntry.key=:referenceKey"); + sb.append("update assessmententry data set data.referenceEntry.key=null where data.referenceEntry.key=:referenceKey"); return dbInstance.getCurrentEntityManager() .createQuery(sb.toString()) .setParameter("referenceKey", entry.getKey()) diff --git a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java index f0367c455e0f793164203f6499e8444ee6925674..fa679279453c8cc75af102a7049731734c2c5d6b 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java +++ b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java @@ -365,6 +365,8 @@ public class RepositoryServiceImpl implements RepositoryService { handler.cleanupOnDelete(entry, resource); dbInstance.commit(); + //nullify the reference + assessmentEntryDao.removeEntryForReferenceEntry(entry); assessmentEntryDao.deleteEntryForRepositoryEntry(entry); dbInstance.commit(); diff --git a/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java b/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java index a629588bc6c6c0b6958d675019a318807f96720a..54dba540b74b9d4b8367e4d5a0e6802e3f80bed3 100644 --- a/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java +++ b/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java @@ -340,7 +340,7 @@ public class AssessmentEntryDAOTest extends OlatTestCase { } @Test - public void deleteEntryForReferenceEntry() { + public void removeEntryForReferenceEntry() { Identity assessedIdentity1 = JunitTestHelper.createAndPersistIdentityAsRndUser("as-node-18"); Identity assessedIdentity2 = JunitTestHelper.createAndPersistIdentityAsRndUser("as-node-19"); RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); @@ -358,18 +358,24 @@ public class AssessmentEntryDAOTest extends OlatTestCase { dbInstance.commitAndCloseSession(); // delete by reference - assessmentEntryDao.deleteEntryForReferenceEntry(refEntry); + int affectedRows = assessmentEntryDao.removeEntryForReferenceEntry(refEntry); dbInstance.commitAndCloseSession(); + Assert.assertEquals(3, affectedRows); //check AssessmentEntry deletedAssessmentEntry1 = assessmentEntryDao.loadAssessmentEntryById(nodeAssessment1.getKey()); - Assert.assertNull(deletedAssessmentEntry1); + Assert.assertNotNull(deletedAssessmentEntry1); + Assert.assertNull(deletedAssessmentEntry1.getReferenceEntry()); AssessmentEntry deletedAssessmentEntry2 = assessmentEntryDao.loadAssessmentEntryById(nodeAssessment2.getKey()); - Assert.assertNull(deletedAssessmentEntry2); + Assert.assertNotNull(deletedAssessmentEntry2); + Assert.assertNull(deletedAssessmentEntry2.getReferenceEntry()); AssessmentEntry deletedAssessmentEntry3 = assessmentEntryDao.loadAssessmentEntryById(nodeAssessment3.getKey()); Assert.assertNotNull(deletedAssessmentEntry3); + Assert.assertNotNull(deletedAssessmentEntry3.getReferenceEntry()); + Assert.assertEquals(entry, deletedAssessmentEntry3.getReferenceEntry()); AssessmentEntry deletedAssessmentEntry4 = assessmentEntryDao.loadAssessmentEntryById(nodeAssessment4.getKey()); - Assert.assertNull(deletedAssessmentEntry4); + Assert.assertNotNull(deletedAssessmentEntry4); + Assert.assertNull(deletedAssessmentEntry4.getReferenceEntry()); } @Test