0

我正在寻找一个针对 java、jpa2、spring、hibernate 数据库应用程序的解决方案,它允许我基本上为实体做类似 SCM 的事情。我有一个托管在多个应用程序服务器上的数据库驱动的 Java 企业应用程序。这些应用程序服务器托管无状态 Web 应用程序(REST API 等),这些应用程序都基于相同的 java 代码并使用相同的数据库。此应用程序提供的一项服务是文件管理。用户(通过各种 api 客户端和前端应用程序)能够创建(上传)、删除、重命名、移动文件和文件夹。

现在一段时间以来,文件版本的要求不断涌现,我想最终解决这个问题。这是我在java实体方面提出的:

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直接通过授权。为此,我需要某种简单的方法来检索“头”版本(这将是版本集合中的最后一个条目)。基本上每个写操作都File需要FileVersion根据当时的“头”创建一个新的。鉴于多个应用程序服务器访问同一个数据库,我不确定是否有某种方法可以锁定相应的File实体(行级锁定?),以便我确定我的新文件版本基于正确的“头” ”。

我的另一个想法是让客户提供他的更改所基于的某种版本标识符。FileVersion如果在持久化此版本标识符时与给定应用程序的最新版本不匹配,File则应用程序将不得不拒绝更改...

我是朝着正确的方向前进还是我的方法被认为是失败的?

4

1 回答 1

1

我会有一个只有“头”值的表(就像普通表一样)和第二个表,其中包含所有更改的日志。这也将允许您获得任何以前的版本。您可以创建触发器来更新日志表或在 Java 中进行。

于 2012-07-29T10:11:33.800 回答