1
在下列情况下,当我保存CharFoo对象,然后做一个找到,通用场abstractFooField转换回一个字,但bar.field从子文档转换为字符串而不是字符。
我做错了什么?或者这不是由Spring Data MongoDB支持的吗?SpringData的MongoDB - 通用转换子文档领域
PS:我使用的是弹簧数据的MongoDB 1.6.0.RC1和弹簧数据公共1.9.0.RC1
@Document(collection = "foo")
public abstract class AbstractFoo<T> {
@Id
private String id;
private T abstractFooField;
private AbstractBar<T> bar;
public AbstractFoo() {}
public AbstractFoo(T abstractFooField, AbstractBar<T> bar) {
this.abstractFooField = abstractFooField;
this.bar = bar;
}
}
public class CharFoo extends AbstractFoo<Character> {
public CharFoo() {}
public CharFoo(Character abstractFooField,
AbstractBar<Character> bar) {
super(abstractFooField, bar);
}
}
@Document
public class AbstractBar<T> {
public AbstractBar() {}
}
public class Bar<T> extends AbstractBar<T> {
private T field;
public Bar(T field) {
this.field = field;
}
}
单元测试:
@Test
public void givenGenericEntities_whenFindOne_thenReturnCorrectTypes() {
// GIVEN
Bar<Character> charBar = new Bar<>('A');
CharFoo charFoo = new CharFoo('B', charBar);
fooRepository.save(charFoo);
// WHEN
CharFoo dbCharFoo = charFooRepository.findOne(charFoo.getId());
// THEN
assertEquals("Field class should match", Character.class, dbCharFoo.getAbstractFooField().getClass());
assertEquals("Field class from sub-class should match", Character.class, ((Bar) dbCharFoo.getBar()).getField()
.getClass());
}
结果:
java.lang.AssertionError: Field class from sub-class should match
Expected :class java.lang.Character
Actual :class java.lang.String
MongoDB的文件:
{
"_id" : ObjectId("54db485a06e70e8444a15291"),
"_class" : "com.test.model.CharFoo",
"abstractFooField" : "B",
"bar" : {
"_class" : "com.test.model.Bar",
"field" : "A"
}
}
你有一个测试用例方便显示你想要什么,以实现和什么你想达到什么目的?你得到一些例外或失败的测试断言? – 2014-10-30 14:27:29
@OliverGierke对不起,拖延时间太长。我添加了一个失败的单元测试。希望它有助于更好地描述我的问题... – MirceaG 2015-02-11 12:26:03
正如我最近再次遇到这个“问题”,我添加了以下错误[链接](https://jira.spring.io/browse/DATAMONGO-1312) – MirceaG 2015-11-03 14:45:57