fix: break Spring Framework 7 circular bean dependency cycles #426

Merged
marcel merged 6 commits from fix/spring7-circular-dependency-cycles into main 2026-05-05 16:39:38 +02:00
Showing only changes of commit 7e6e809aa4 - Show all commits

View File

@@ -6,12 +6,11 @@ import org.raddatz.familienarchiv.audit.AuditKind;
import org.raddatz.familienarchiv.audit.AuditService; import org.raddatz.familienarchiv.audit.AuditService;
import org.raddatz.familienarchiv.document.annotation.CreateAnnotationDTO; import org.raddatz.familienarchiv.document.annotation.CreateAnnotationDTO;
import org.raddatz.familienarchiv.document.annotation.UpdateAnnotationDTO; import org.raddatz.familienarchiv.document.annotation.UpdateAnnotationDTO;
import org.raddatz.familienarchiv.document.transcription.TranscriptionService; import org.raddatz.familienarchiv.document.transcription.TranscriptionBlockRepository;
import org.raddatz.familienarchiv.exception.DomainException; import org.raddatz.familienarchiv.exception.DomainException;
import org.raddatz.familienarchiv.exception.ErrorCode; import org.raddatz.familienarchiv.exception.ErrorCode;
import org.raddatz.familienarchiv.document.annotation.DocumentAnnotation; import org.raddatz.familienarchiv.document.annotation.DocumentAnnotation;
import org.raddatz.familienarchiv.document.annotation.AnnotationRepository; import org.raddatz.familienarchiv.document.annotation.AnnotationRepository;
import org.springframework.context.annotation.Lazy;
import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -27,11 +26,7 @@ import java.util.UUID;
public class AnnotationService { public class AnnotationService {
private final AnnotationRepository annotationRepository; private final AnnotationRepository annotationRepository;
// @Lazy: AnnotationService and TranscriptionService have a mutual cleanup private final TranscriptionBlockRepository transcriptionBlockRepository;
// dependency (deleting an annotation cascades to its blocks; deleting a block
// cascades to its annotation). Lazy resolution lets Spring construct both beans.
@Lazy
private final TranscriptionService transcriptionService;
private final AuditService auditService; private final AuditService auditService;
public List<DocumentAnnotation> listAnnotations(UUID documentId) { public List<DocumentAnnotation> listAnnotations(UUID documentId) {
@@ -123,7 +118,7 @@ public class AnnotationService {
throw DomainException.forbidden("Only the annotation author can delete it"); throw DomainException.forbidden("Only the annotation author can delete it");
} }
transcriptionService.deleteByAnnotationId(annotationId); transcriptionBlockRepository.deleteByAnnotationId(annotationId);
annotationRepository.delete(annotation); annotationRepository.delete(annotation);
} }