1

我有一个关于列表比较器的问题。我有一个带有表格的页面的 Web 应用程序。我可以编辑此表中的数据并删除行。标准比较器在我编辑数据时工作正常,但在删除行时出现问题。问题很常见(我认为)当我删除例如一行时发生了什么 javers 将旧列表与现在的列表进行比较,它看起来像这样:旧列表有两个对象现在列表有一个对象(我删除了第一个对象)现在 javers 没有'不知道哪个对象被删除,他将旧列表中的第一个对象与新列表中的第二个对象进行比较,对他来说整个对象都被更改了,这是不正确的。

我的想法是我将编写自己的列表比较器,并在此比较器中,在收集 javers 比较方法之前检查比较对象是否具有相同的 ID。不幸的是,我无法获取对象 ID。我的比较器看起来像这样

public class ListComperator implements CustomPropertyComparator {

public ValueChange compare(List list1, List list2, GlobalId globalId, Property property) {

    for (Object o1 : list1) {

        for (Object o2 : list2) {
            if(o1.getId().equals(o2.getId()) )  {
                javers.compare(o1, o2);
            }
        }

    }}}

第二个列表“list2”有我的对象,我可以从中获取任何属性,例如 ID。第一个列表“list1”是带有一些 ValueObjectId 的列表,我不知道如何从对象 o1 获取带有 id 的属性。有没有办法获得这些信息,或者我做错了什么,请帮忙。

4

1 回答 1

0

我想您将 ValueObjects 存储在这些列表中?由于 ValueObjects 没有标识符,因此无法检测当 List 更改时它们如何在 List 索引之间“移动”。如果无法识别您的对象,自定义比较器将无济于事。我建议为存储在 List 中的对象添加某种标识符并将它们映射为实体(使用 @Id 注释)。

于 2016-01-09T19:01:20.163 回答