Java, jpa2, spring, hibernate 데이터베이스 응용 프로그램을 기반으로 솔루션을 찾고 있습니다. 기본적으로 엔티티의 SCM과 같은 작업을 수행 할 수 있습니다. 여러 응용 프로그램 서버에서 호스팅되는 데이터베이스 기반 Java 엔터프라이즈 응용 프로그램이 있습니다. 이러한 응용 프로그램 서버는 모두 동일한 Java 코드를 기반으로하며 동일한 데이터베이스를 사용하는 상태 비 저장 웹 응용 프로그램 (REST API 등)을 호스트합니다. 이 응용 프로그램이 제공하는 하나의 서비스는 파일 관리입니다. 사용자는 (다양한 API 클라이언트와 프론트 엔드 응용 프로그램을 통해) 파일과 폴더를 생성 (업로드), 삭제, 이름 바꾸기, 이동할 수 있습니다.변경 로그 및 데이터베이스 동기화를 사용하는 엔티티
이제 파일 버전 요구 사항이 갑자기 나타 났으며 마침내이 문제를 해결하고 싶습니다. 이것은 내가 자바 실체의 관점에서 해낸 것입니다 :
public class File {
private String id;
private ReadableInstant created;
private List<FileVersion> versions;
}
public class FileVersion {
private String name;
private FileVersion parent;
private List<FileVersion> children;
private ReadableInstant modified;
private FileOperation operation;
}
public enum FileOperation {
CREATE,
RENAME,
UPDATE,
DELETE
}
내가 위임을 통해 직접 File
하지 FileVersion
를 노출 할 계획입니다. 이 기능을 사용하려면 "head"버전 (버전 컬렉션의 마지막 항목)을 검색하는 간단한 방법이 필요합니다. 기본적으로 File
의 모든 쓰기 작업은 현재의 "헤드"를 기반으로 새로운 FileVersion
을 생성해야합니다. 동일한 데이터베이스에 액세스하는 여러 응용 프로그램 서버의 관점에서 각자 File
엔티티 (행 수준 잠금?)를 잠글 수있는 몇 가지 방법이 있는지 확실하지 않으므로 올바른 새 파일 버전을 기반으로해야합니다 " 머리".
또 다른 생각은 클라이언트가 변경 사항을 기반으로하는 일종의 버전 식별자를 제공하게하려는 것입니다. 지속될 때이 버전 식별자가 주어진 File
에 대한 최신 FileVersion
과 일치하지 않는 경우 응용 프로그램은 변경 사항을 거부해야합니다. ...
나는 이와 같은 올바른 방향으로 가고있는 것으로 간주됩니다. 실패?
답변을 수락하지 못해 죄송합니다. 방금이 질문을 잊어 버렸습니다. 그 동안 나는 당신이 제안한 것과 크게 다르지 않은 해결책을 가지고갔습니다. 나는 이제 보통의 File 객체를 가지며 FileHistoryEntry 컬렉션을 가지고있다. 이 항목은 이전 File 버전을 복구하는 것으로 해석 될 수 있지만 완전히 날아간 SCM 계열 시스템만큼 정교하지는 않습니다. – aeisele