Printemps Mongodb - impossible d'instancier la classe d'haricot [java.util.Liste]: classe Spécifiée est une interface
mon projet est à l'aide de Printemps de données mongodb. J'ai été de ne pas avoir d'erreur ci-dessous jusqu'à ce que j'ai fait une modification à l'un des documents qui a un champ avec l'ensemble des Documents. Ça marchait très bien avant, mais maintenant, je reçois l'erreur ci-dessous.
Le domaine j'ai mis à jour a été impapps dans les Projets de classe POJO. Je ne sais pas comment faire pour effacer cette erreur essayé différentes choses mais n'a pas fonctionné.
SEVERE: Servlet.service() for servlet [appServlet] in context with path [/mongodproject] threw exception [Request processing failed; nested exception is org.springframework.data.mapping.model.MappingInstantiationException: Could not instantiate bean class [java.util.List]: Specified class is an interface] with root cause
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [java.util.List]: Specified class is an interface
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:101)
at org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:60)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:232)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:212)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readValue(MappingMongoConverter.java:1008)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.access$100(MappingMongoConverter.java:75)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$MongoDbPropertyValueProvider.getPropertyValue(MappingMongoConverter.java:957)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.getValueInternal(MappingMongoConverter.java:713)
Voici mon POJO et le Printemps Référentiel de la classe.
Projet de Classe POJO
@Document(collection="releases")
public class Project {
@Id
private String id;
......
@Field("impapps")
private List<ImpactedApplications> impapps=new ArrayList<ImpactedApplications>();
.....getters/setters
}
ImpactedApplication Classe POJO:
public class ImpactedApplications {
@Field("appid")
private String appId;
.....
@Field("repository")
private List<ScriptsRepo> rep=new ArrayList<ScriptsRepo>();
@Field("artifacts")
private List<Artifacts> artifacts=new ArrayList<Artifacts>();
//getter and setters
}
Artefacts de Classe POJO
public class Artifacts {
@Field("artifacttype")
private String artifactType;
@Field("documentlink")
private String documentLink;
@Field("arttestphase")
private String artTestPhase;
@Field("artifactname")
private ArtifactsEnums artifactsNames;
@Field("startdate")
private String startDate;
@Field("enddate")
private String endDate;
@Field("peerrev")
private boolean peerReview;
@Field("busrev")
private boolean busReview;
@Field("na")
private boolean na;
Printemps classes de Dépôt
public interface ProjectRepository extends Repository<Project, String> {
Project findById(String id);
List<Project> findByYearAndReleaseMonthNoOrderByProjectNameDesc(String year,String month, Sort sort);
Project findByYearAndReleaseMonthNoAndId(String year, String month,String id);
Chaque fois que j'appelle les méthodes ci-dessus, je reçois l'exception.
Ci-dessous est comment mon document est à la recherche actuellement.
impapps
, repository
et artifacts
sont des tableaux dans MongoDB? Si oui, le read(…)
la méthode à exécuter dans le typeToUse.isCollectionLike() && dbo instanceof BasicDBList
clause et correctement créer une collection pour la propriété. Je suis en supposant que vous plutôt de trouver quelque chose de pas un tableau et donc de l'entité de résolution des coups de pied dans. PS: auriez-vous l'esprit correctement mise en forme les exemples de code? Rend le post beaucoup mieux à lire et sera probablement attirer plus de gens à répondre.Merci pour votre réponse. J'ai formaté ma question un peu. Et j'ai l'
document
pic ci-joint. impappa
est créé comme un tableau, artifacts
est créé sous forme de tableau et repository
est actuellement créé des vides de la matrice de actuellement.maintenant, quand je vois ça de près..je vois que
impapps
est de stocker un document au lieu d'un tableau de documents..je pense qu'il y a des problèmes dans mon code. Quand j'ai modifier le impapps
dirait qu'il n'est pas stocker dans un tableau, mais comme un document.Puisque vous êtes ici..pouvez-vous me dire quelle est la bonne façon de mettre à jour une sortie de document dans un tableau..j'ai essayé cela, mais il est juste de le remplacer en tant que document.
Criteria crit=new Criteria().andOperator( Criteria.where("_id").is(projectId), Criteria.where("impapps.appid").is(impapp.getAppId()) );Query query=new Query(crit);Update upd=new Update(); upd.set("impapps", impapp);mongoTemplate.updateFirst(query, upd, Project.class)
passons sur le fait monsieur. Je l'ai eu par l'ajout d'un signe$. Merci pour la recherche dans le post. Vous avez d'excellentes vacances!!
OriginalL'auteur VBJ | 2013-12-18
Vous devez vous connecter pour publier un commentaire.
La
impapps
champ dans votre document n'est pas un tableau mais un imbriquée document. Donc, si vous changez votreList<ImpactedApplications>
à une simpleImpactedApplications
cela devrait lire amende.OriginalL'auteur Oliver Drotbohm
J'ai eu la même exception :
Essayer de déclarer votre champ comme ceci :
Je n'aime pas faire ça mais ça fonctionne pour moi.
edit:
Mon problème était dû à la détente de fonctionnement au cours de l'agrégation.
- Elle se transformer array (déclarée comme une Liste<> dans ma classe) en objet
et puis la réflexion ne fonctionne pas parce que le printemps m'attendais à une liste.
OriginalL'auteur bastien