Does spring-data support polymorphism? For example, can persist a concrete implementation using a repository declared to manage the interface?
Code:public interface Artifact { ObjectId getId(); String getArtifactName(); String getArtifactType(); List<String> getSupportedModels(); Date getDateAdded(); File getArtifactFile(); } public abstract class AbstractArtifact implements Artifact { ... } public class ConcreteArtifact extends AbstractArtifact { .... } public interface ArtifactRepository extends MongoRepository<Artifact,ObjectId> {}
I seem to be able to instantiate a ConcreteArtifact and save it fine. The mongo shell depicts all attributes using find(). However, when I attempt to use the findOne() method on the ArtifactRepository I receive the following error:
Code:org.springframework.data.mapping.model.MappingInstantiationException: Could not instantiate bean class [com.lexmark.pssd.app.mve.library.Artifact]: Specified class is an interface at org.springframework.data.mapping.MappingBeanHelper.constructInstance(MappingBeanHelper.java:115) at org.springframework.data.document.mongodb.convert.MappingMongoConverter.read(MappingMongoConverter.java:214) at org.springframework.data.document.mongodb.convert.MappingMongoConverter.read(MappingMongoConverter.java:199) at org.springframework.data.document.mongodb.MongoTemplate$ReadDbObjectCallback.doWith(MongoTemplate.java:1480) at org.springframework.data.document.mongodb.MongoTemplate.execute(MongoTemplate.java:337) at org.springframework.data.document.mongodb.MongoTemplate.doFindOne(MongoTemplate.java:978) at org.springframework.data.document.mongodb.MongoTemplate.findOne(MongoTemplate.java:485) at org.springframework.data.document.mongodb.MongoTemplate.findOne(MongoTemplate.java:480) at org.springframework.data.document.mongodb.repository.SimpleMongoRepository.findOne(SimpleMongoRepository.java:99) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.data.repository.support.RepositoryFactorySupport$QueryExecuterMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:355) at org.springframework.data.repository.support.RepositoryFactorySupport$QueryExecuterMethodInterceptor.invoke(RepositoryFactorySupport.java:336) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at $Proxy123.findOne(Unknown Source) at com.lexmark.pssd.app.mve.library.ArtifactRepositoryIntegrationTest.testSave(ArtifactRepositoryIntegrationTest.java:61) at


Reply With Quote