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

检测Java对象是否已被修改?,java,Java,假设我有一个标准的Javabean:即它包含String、List、HashMap等成员 我的问题是:检测此类对象的实例是否已从先前/原始状态修改的最简单方法是什么 我想知道这一点的原因是,在以下情况下,我决定是否应该更新数据库中的对象:(I)未进行任何更改,或者(ii)进行了更改,但随后进行了反转 我一直在考虑比较hashCode或byte[],但似乎不起作用。有什么想法吗?如果您有setter,如果设置了新值,请通知此setter中的侦听器列表。hibernate开发人员也遇到了同样的问题,

假设我有一个标准的Javabean:即它包含
String
List
HashMap
等成员

我的问题是:检测此类对象的实例是否已从先前/原始状态修改的最简单方法是什么

我想知道这一点的原因是,在以下情况下,我决定是否应该更新数据库中的对象:(I)未进行任何更改,或者(ii)进行了更改,但随后进行了反转


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

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

hibernate开发人员也遇到了同样的问题,他们通过为返回的实体创建代理来解决。代理注册每个setter调用,从而确定实体是否已更改。

是的,可以完成,并且已经完成。。。它叫。只要使用它,不要“重新发明轮子”

因为您使用的是JavaBeans约定,最好让您的设置程序更新一些标志,如果它们使用的参数与目标字段的当前值不同。如果您需要确定两个或多个调用是否会导致实际更改(例如A->B->A不进行更改),那么它会变得更复杂。我不确定这样做是否值得


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

已经有一段时间了-也许您可以接受答案?@Larry,想要接受答案吗?作为这个非常旧的线程中的附加项,以帮助来自Google的其他人:这不起作用,因为“null”-不会检测到更改,例如,setString(“newString”)+setString(oldValue)不会更改任何内容,但按照您的方法,您会得到一个正值alert@alex是的,不知怎么说,这是对的。但这是一个定义问题。调用
setString(“newString”)
后,对象的状态肯定已更改,因此可以有效地通知侦听器。也许您想在对象更改时保持它?将来您最终会将字符串更改回旧值,这一点很重要。但这不一定。这取决于你的用例。好的,当然,对象已经改变了。但我的想法是,尽管原始状态已经恢复,但某些应用程序确实会通知更改的状态。根据定义,已经进行了一次操作,但在这种情况下,检测所有情况下的修改并不合乎逻辑/有用。您能否提供一点详细信息或任何站点的更具体参考资料。