Java Javers值更改比较不起作用
我是Javers的新手,并在我的项目中实施了它。与让我们做噩梦的物体的区别 Javers版本2.9.2./Java 7 我正在做的是: 第一步:从数据库中获取XML。 第二步:使用 JAXB和转换为Java TOTransfer对象。 用于转换为对象的XML为: 第1版XML:Java Javers值更改比较不起作用,java,javers,Java,Javers,我是Javers的新手,并在我的项目中实施了它。与让我们做噩梦的物体的区别 Javers版本2.9.2./Java 7 我正在做的是: 第一步:从数据库中获取XML。 第二步:使用 JAXB和转换为Java TOTransfer对象。 用于转换为对象的XML为: 第1版XML: <fTO> <fId>10519</fId> <removed for brevity/> <subList>
<fTO>
<fId>10519</fId>
<removed for brevity/>
<subList>
<subList>
<fId>10528</fId>
<removed for brevity/>
</subList>
<subList>
<fId>10527</fId>
<removed for brevity/>
</subList>
<subList>
<fId>10520</fId>
<removed for brevity/>
</subList>
</subList>
</fTO>
<fTO>
<fId>10519</fId>
<removed for brevity/>
<subList>
<subList>
<fId>10527</fId>
<removed for brevity/>
</subList>
<subList>
<fId>10520</fId>
<removed for brevity/>
</subList>
</subList>
</fTO>
或者
我得到的结果是:
1. NewObject{globalId:'<className>.FTO/#subList/2'}
2. ValueChange{globalId:'<className>.FTO/#subList/1', property:'fId', oldVal:'10520', newVal:'10527'}
3. ValueChange{globalId:'<className>.FTO/#subList/0', property:'fId', oldVal:'10527', newVal:'10528'}
4. ListChange{globalId:'<className>.FTO/', property:'subList', containerChanges:[(2).added:'<className>.FTO/@1f']}
4.<removed other for brevity.>
现在它正在正确地获取新对象,但将10520与10527进行比较
10527和10528.10528是我的新目标,不过,仍在比较
虽然根据贾维尔和我的要求,它必须比较10527和10527
我试着做我从谷歌搜索得到的所有事情,但没有任何改变
同样使用此测试,结果相同:
List<FTO> FL1 = (List<FTO>) ((FTO)o1).getSubList();
List<FTO> FL2 = (List<FTO>) ((FTO)o2).getSubList();
Diff diff1 = javers.compareCollections(FL1, FL2, FTO.class);
我也尝试过实现自定义比较器,但没有成功。
帮我,贾维斯·马斯特斯先生
编辑:添加Java类
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class FTO {
@XmlElement
private Integer fId;
@XmlElementWrapper
@XmlElement
private List<FTO> subList = new ArrayList<FTO>();
//<Removed for brevity>
@XmlElement
private String fIdStr;
public String getFIdStr() {
return fIdStr;
}
public void setFIdStr(String fIdStr) {
this.fgIdStr = fgIdStr;
}
public Integer getFId() {
return fId;
}
public void setFId(Integer fId) {
this.fId = fId;
if(null != fId){
setFIdStr(fId.toString());
}
}
public List<FTO> getSubList() {
return subList;
}
public void setSubList(List<FTO> subList) {
this.subList = subList;
}
//<Removed for brevity>
}
你可以用
Javers javers = JaversBuilder.javers()
.withListCompareAlgorithm(ListCompareAlgorithm.AS_SET)
.build();
用@IdJavers id标记字段'fid',然后将根据列表中未按顺序排列的id对对象进行比较
另外,有关更多信息,请参阅文档Javers比较Java对象,因此XML是不相关的。我可以试着帮你,但是你需要展示你传递给眼睛的对象的类别,巴特克,你是对的。此xml仅用于从数据库获取数据,并使用jaxb设置要比较的java对象。我将尝试向您展示java对象。嗨,Bartek,我自己比较了内部对象。尽管这可能不是一个最佳实践。
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class FTO {
@XmlElement
private Integer fId;
@XmlElementWrapper
@XmlElement
private List<FTO> subList = new ArrayList<FTO>();
//<Removed for brevity>
@XmlElement
private String fIdStr;
public String getFIdStr() {
return fIdStr;
}
public void setFIdStr(String fIdStr) {
this.fgIdStr = fgIdStr;
}
public Integer getFId() {
return fId;
}
public void setFId(Integer fId) {
this.fId = fId;
if(null != fId){
setFIdStr(fId.toString());
}
}
public List<FTO> getSubList() {
return subList;
}
public void setSubList(List<FTO> subList) {
this.subList = subList;
}
//<Removed for brevity>
}
Javers javers = JaversBuilder.javers()
.withListCompareAlgorithm(ListCompareAlgorithm.AS_SET)
.build();