检测Java对象是否已被修改?

时间:2011-11-14 15:05:42

标签: java

考虑到我有一个标准的Java bean:即它包含StringListHashMap等成员。

我的问题是:检测这样一个对象的实例是否已经从之前/原始状态进行了修改是最简单的方法是什么?

我想知道这个的原因是我确定是否应该在DB中更新对象,如果:(i)没有进行任何更改,或者(ii)进行了更改但是逆转。

我一直在考虑hashCode或byte []的比较,但似乎不起作用。有什么想法吗?

4 个答案:

答案 0 :(得分:6)

是的,它可以完成,已经完成......它被称为hibernate。只是使用它,不要“重新发明轮子”

答案 1 :(得分:4)

如果您有setter,如果设置了新值,则通知此setter中的侦听器列表。

答案 2 :(得分:3)

同样的问题有 hibernate 开发人员,他们通过为返回的实体创建代理来处理它。代理注册每个setter调用,因此确定实体是否已更改。

答案 3 :(得分:2)

由于您正在使用JavaBeans约定,因此如果使用与目标字段的当前值不同的参数调用它们,则最好让您的setter更新一些标志。如果您需要确定两个或多个呼叫是否会导致实际更改(例如A-> B-> A不做任何更改),那么它会变得更复杂。我不确定它是否值得开销。

您可能希望使用Java Persistance API(JPA),这对于这类内容来说要好得多。它也可以在Java EE上下文之外的普通Java SE应用程序中使用。这里有更多的工作,因为你需要处理事务提交和回滚,但API无论如何都会证明非常有用。