我对列表比较器有疑问。我有一个带有表格页面的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的属性。 有没有办法获取这些信息,或者我正在做一些完全错误的事情,请帮忙。
答案 0 :(得分:0)
我想你在那些列表中存储了ValueObjects?由于ValueObjects没有标识符,因此无法在List更改时检测它们在List索引之间的移动方式。如果没有a,定制比较器将无济于事 识别对象的方法。 我建议为存储在List中的对象添加某种标识符,并将它们映射为实体(使用@Id注释)。