Java 在两个JPA应用程序之间同步数据

Java 在两个JPA应用程序之间同步数据,java,hibernate,jpa,synchronization,offline-mode,Java,Hibernate,Jpa,Synchronization,Offline Mode,我编写了一个使用JPA(和hibernate作为持久性提供者)的应用程序。 它在具有多个表的数据库上工作 我需要创建一个“脱机模式”,在该模式下,作为客户端的programa的副本允许相同的功能,同时在可访问时保持其数据与服务器同步 其目的是获得一个客户机,您可以从服务器“分离”,对数据进行更改,然后将更改合并回服务器。有点像版本控制系统 管理冲突并不重要,以防用户决定保留哪个版本 我的想法是,给数据库中的每一行分配最后一个编辑时间戳,但这不起作用。客户端最初下载整个数据库的一个副本,并在未连接

我编写了一个使用JPA(和hibernate作为持久性提供者)的应用程序。 它在具有多个表的数据库上工作

我需要创建一个“脱机模式”,在该模式下,作为客户端的programa的副本允许相同的功能,同时在可访问时保持其数据与服务器同步

其目的是获得一个客户机,您可以从服务器“分离”,对数据进行更改,然后将更改合并回服务器。有点像版本控制系统

管理冲突并不重要,以防用户决定保留哪个版本

我的想法是,给数据库中的每一行分配最后一个编辑时间戳,但这不起作用。客户端最初下载整个数据库的一个副本,并在未连接到服务器时修改行时记录第二个时间戳。通过这种方式,它知道哪些数据发生了更改,以及与服务器同步的最后一个时间戳。当您重新连接到服务器时,他必须询问自上次从服务器同步以来已更改的数据是什么,并发送已更改的数据。(有点简化,但冲突管理应该不是大问题)

当然,这在删除行的情况下不起作用。如果服务器或客户机都删除了一行,他们将不会注意到它,而另一方也永远不会知道

解决方案是维护一个包含已删除行列表的表,但这似乎太昂贵了

有人知道一种有效的方法吗?已经有类似的东西了?

Enver:

如果您希望有一个简单的解决方案,您可以创建类似于“时间戳”的版本字段

审计:

如果您希望有一个复杂的、功能强大的解决方案,您应该使用


第二个看起来很完美,但不会太重/太慢?你的硬盘需要更多的空间。