Sem*_*mpa 6 spring neo4j nosql spring-data-graph
嗨所有患者开发者使用弹簧数据图表.由于文档较少且测试覆盖率非常差,因此有时很难理解底层框架的预期行为,框架应该如何工作.目前我有一些与SDG 1.1中引入的新获取方法有关的问题.与SDG 1.1相反,在2.0中写入\ read through只关系和用@Fetch注释注释的相关对象被急切地获取其他人应该被懒惰地取出...现在我的第一个问题:
我在使用SDG 2.0.0.RC1时注意到的另一个问题如下:当我将新对象添加到未获取的集合时,有时会正确添加并保留,但有时不会.我为这个案例写了测试,它以非确定性的方式工作.有时失败有时会以成功结束.以下是用例:
Group groupFromDb = neoTemplate.findOne(group.getId(), Group.class);
assertNotNull(groupFromDb);
assertEquals("Number of members must be equals to 1", 1, groupFromDb.getMembers().size());
User secondMember = UserMappingTest.createUser("secondMember");
groupFromDb.addMember(secondMember);
neoTemplate.save(groupFromDb);
Group groupAfterChange = neoTemplate.findOne(groupFromDb.getId(), Group.class);
assertNotNull(groupAfterChange);
assertEquals("Number of members must be equals to saved entity", groupFromDb.getMembers().size(), groupAfterChange.getMembers().size());
assertEquals("Number of members must be equals to 2", 2, groupAfterChange.getMembers().size());
Run Code Online (Sandbox Code Playgroud)这个测试有时在最后一个断言上失败,这意味着有时会将成员添加到集合中,有时不会.我猜这个问题出现在ManagedFieldAccessorSet的某个地方,但很难说因为这是不确定的.我用mvn2和mvn3用java 1.6_22和1.6_27运行测试,我总是得到相同的结果:有时候确定有时测试失败.User等的实现如下:
@Override
public boolean equals(final Object other) {
if ( !(other instanceof User) ) {
return false;
}
User castOther = (User) other;
if(castOther.getId() == this.getId()) {
return true;
}
return new EqualsBuilder().append(username, castOther.username).isEquals();
}
Run Code Online (Sandbox Code Playgroud)
- 我发现对于使用@Fetch注释的对象,使用可序列化的Java HashSet也有点问题,而对于延迟加载的字段使用ManagedFieldAccessorSet,它不可序列化并导致不可序列化的异常.
欢迎任何帮助或建议.提前致谢!
简单映射方法仅在 Spring Data Neo4j 2.0 中添加,因此它不如高级 AspectJ 映射那么成熟。我们目前正在努力更广泛地记录它。
最近还添加了延迟加载选项。所以非常欢迎您的反馈。
目前 SDN 并未对延迟加载对象采用代理方法。因此,(尚)不支持自动“访问时获取”。这就是为什么在访问未加载字段时也不会引发异常,并且无法“发现”实体是否未完全加载。
在当前快照中,存在template.fetch()完全加载延迟加载对象和集合的操作。
我们将研究 HashSet 与 ManagedSet 问题,确实这不是一个好的解决方案。
对于测试用例。getId() 返回的是Long对象还是long原语?在这里使用可能是明智的getId().equals(castOther.getId()),因为不能保证Number对象的引用相等。
| 归档时间: |
|
| 查看次数: |
968 次 |
| 最近记录: |