gpt4 book ai didi

java - SpringData MongoDB - 转换通用子文档字段

转载 作者:太空宇宙 更新时间:2023-11-04 14:26:13 26 4
gpt4 key购买 nike

在以下情况下,当我保存 CharFoo 对象然后执行查找时,通用字段 abstractFooField 会转换回字符,但子文档中的 bar.field 会转换为字符串,而不是字符。
难道我做错了什么?或者Spring Data MongoDB不支持这个?

P.S:我正在使用 spring-data-mongodb 1.6.0.RC1 和 spring-data-commons 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"
}
}

最佳答案

此问题已由 DATAMONGO-1312 解决在 spring-data-mongodb 1.8.1 中

关于java - SpringData MongoDB - 转换通用子文档字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26630523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com