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