2

참고 : J2EE Spring MVC + Hibernate를 둘 다 사용하여이 작업에 주석을 사용하고 있습니다.수동 재귀 적 삭제는 최대 절전 모드에서 "병합으로 전달 된 삭제 된 인스턴스"를 던졌습니다.

나는이 폴더에 폴더와 파일의 계층 구조가있는 최대 절전 모드로 모델링 된 파일 시스템을 가지고 있습니다. 각 폴더는 상위 폴더를 나타내며 루트 폴더 인 경우 null을 나타냅니다. 거기에는 약간의 다형성이 있기 때문에 아이들에 대한 참조가 없기 때문에 아이들을 검색하기 위해 쿼리하는 것이 가장 좋을 것이라고 판단했습니다. 그럼에도 불구하고 데이터베이스에서 내역을 추적하기 위해 MySQL 트리거를 사용해야한다는 요구와 결합 된 것은 연쇄 삭제가 옵션이 아니라는 것을 의미합니다.

그 결과 수동으로 삭제해야합니다.

// Pseudo-java-code 
deleteFolder(Folder folder) 
{ 
    Set<Folder> folders = getFoldersInFolder(folder); 
    for (Folder child:folders) { 
    deleteFolder(child); 
    } 
    Set<File> files = fileDAO.getFilesInFolder(folder); 
    for (File f:files) { 
    fileDAO.deleteFile(f); 
    } 
    remove(folder); // method from org.execution.dao.JpaDao 
} 

불행하게도 나는 그것을 시도 할 때 예외은 "병합에 전달 삭제 예"를 점점 계속 : 자,이에 대한 재귀 논리는 내가 뭘해야 모두가 폴더 DAO에 따라 정직하고 공정 것 같다 트랜잭션의 변경 사항을 커밋합니다. 나는이 문제를 어떻게 해결합니까

@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED) 

다음 DAO는 클래스의 상단에 배치 된 다음 트랜잭션 주석이있는 서비스에 의해 호출되고?

+0

자녀와의 관계를 제외하고 파일 및 폴더와 다른 관계가 있습니까? 동일한 트랜잭션에서 다른 지속성 작업을 수행합니까? – axtavt

답변

2

내가 대답을 알았으니 어리석은 느낌이 든다. 나는 "remove (folder)"라고 불렀다. 재귀 함수를 호출 한 후 코드가 폴더를 두 번 제거하려고 시도한 것을 의미합니다.