如何将属性更新同步到单个域实例?

时间:2010-12-06 23:20:19

标签: orm persistence

我正在寻找将更新同步到持久对象的单个实例的想法。

一个简单的域对象:

public class Employee {
     long id;
     String phone;
     String address;
}

假设两个UI实例拉出了Employee(1),其中id = 1。第一个客户端编辑Employee(1)的phone属性;第二个客户端编辑Employee(1)的地址属性。当他们提交更改时,都需要保留。

一种可能的解决方案是为每个属性创建一个更新函数:

public void updatePhone(Employee employee) {
     // right now I am synchronizing _employeeUpdateLock
     // synchronize instance of Employee won't work
     synchronized( something ) {
          // update phone
     }
}
// a similar function for address

遗憾的是,这种方法不能很好地扩展。 API需要不断地与属性对齐。注意

public void update(Employee employee) { ... }

将无效,因为该函数无法判断客户端打算更改哪个属性,除非可以在更新函数中提取原始对象的副本。

Hibernate提供了一种将行锁定到数据库的机制。这也不能很好地扩展。

也许解决方案取决于预期修改行的频率。对于低频修改,同步和锁定都很好。对于高频率修改,可以使用检索时行的副本来确定更新的属性。

我希望找到一个更好的范例来解决这个问题。感谢。

1 个答案:

答案 0 :(得分:0)

我真的不明白你想要的架构。几个客户端共享同一数据对象的一个​​实例?这怎么可能 - 没有使用某种远程对象模型(现在被认为是坏事)?