我编写了一个使用 JPA(和 hibernate 作为持久性提供者)的应用程序。它适用于具有多个表的数据库。
我需要创建一个“离线模式”,其中充当客户端的程序副本允许相同的功能,同时在可访问时保持其数据与服务器同步。
目的是获得一个可以从服务器“分离”的客户端,对数据进行更改,然后将更改合并回来。有点像修订控制系统。
管理冲突并不重要,以防用户决定保留哪个版本。
我的想法,但它行不通,是为数据库中的每一行分配最后一个编辑时间戳。客户端最初下载整个数据库的副本,并且在未连接到服务器时修改行时还记录第二个时间戳。通过这种方式,它知道哪些数据发生了变化,以及它与服务器同步的最后一个时间戳。当您重新连接到服务器时,他将不得不询问自上次从服务器同步以来已更改的数据是什么,并发送已更改的数据。(稍微简化了一点,但冲突的管理应该问题不大)
当然,这在删除行的情况下不起作用。如果服务器或客户端都删除了一行,他们不会注意到它,而另一个永远不会知道。
解决方案是维护一个包含已删除行列表的表,但这似乎太昂贵了。
有谁知道一种有效的方法?已经有类似的东西了?