所以,我有一些OrmLite 4.41模型类,最初由GSON填充(为简洁起见,已简化)
public class Crag {
@DatabaseField(id=true) private int id;
@ForeignCollectionField(eager=true, maxEagerLevel=2) @SerializedName("CragLocations")
private Collection<CragLocation> cragLocations;
}
public class CragLocation {
@DatabaseField(id=true) private int id;
@DatabaseField private int locationType;
@DatabaseField(foreign=true, foreignAutoCreate=true, foreignAutoRefresh=true)
private Crag crag;
@DatabaseField(foreign=true, foreignAutoCreate=true, foreignAutoRefresh=true)
private Location location;
}
public class Location {
@DatabaseField(id=true) private int id;
@DatabaseField private BigDecimal latitude;
@DatabaseField private BigDecimal longitude;
}
我正在测试事情正在发生,因为我期待......
@Test
public void canFindById() {
Crag expected = ObjectMother.getCrag431();
_repo.createOrUpdate(template431);
Crag actual = _repo.getCragById(431);
assertThat(actual, equalTo(template431));
}
他们不平等......为什么不呢?因为在GSON创建的对象中(在ObjectMother.getCrag431()
中),Crag的cragLocations字段是一个ArrayList,在OrmLite加载的那个字段中,它是一个EagerForeignCollection
我在这里错过了一招吗?有没有办法告诉OrmLite我想要哪种类型的Collection?我应该只有一个方法将集合作为一个arraylist返回并测试它的相等性吗?
提前致谢
答案 0 :(得分:1)
有没有办法告诉OrmLite我想要哪种类型的Collection?
没有办法做到这一点。当ORMLite返回Crag
时,它将是EagerForeignCollection
或LazyForeignCollection
。
我应该只有一个方法将集合作为一个arraylist返回并测试它的相等性吗?
我假设在您的Crag.equals(...)
方法中,您正在测试cragLocations
字段的相等性为this.cragLocations.equals(other.cragLocations)
。这是行不通的,因为正如你猜测的那样,它们是不同的类型。
如果需要测试相等性,可以将它们作为数组提取。类似的东西:
Array.equals(
this.cragLocations.toArray(new CragLocation[this.cragLocations.size()]),
other.cragLocations.toArray(new CragLocation[this.cragLocations.size()]));