Tuesday 15 January 2013

java - SpringData MongoDB - convert generic sub-document fields -



java - SpringData MongoDB - convert generic sub-document fields -

in next case, when save charfoo objects , find, generic field abstractfoofield converted character, bar.field sub-document converted string , not character. doing wrong? or not supported spring info mongodb?

p.s: i'm using 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; } }

unit test:

@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()); // assertequals("field class should match", character.class, dbcharfoo.getabstractfoofield().getclass()); assertequals("field class sub-class should match", character.class, ((bar) dbcharfoo.getbar()).getfield() .getclass()); }

result:

java.lang.assertionerror: field class sub-class should match expected :class java.lang.character actual :class java.lang.string

mongodb document:

{ "_id" : objectid("54db485a06e70e8444a15291"), "_class" : "com.test.model.charfoo", "abstractfoofield" : "b", "bar" : { "_class" : "com.test.model.bar", "field" : "a" } }

this solved datamongo-1312 in spring-data-mongodb 1.8.1

java mongodb generics spring-data spring-data-mongodb

No comments:

Post a Comment