morphia icon indicating copy to clipboard operation
morphia copied to clipboard

No usable constructor

Open pferrel opened this issue 11 years ago • 2 comments

green's 1.3

I have a List of Pairs embedded in the class I save. Shouldn't this work?

private List<Pair<String, Float>> items;

INFO: LoggerImplFactory set to com.github.jmkgreen.morphia.logging.jdk.JDKLoggerFactory Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair at com.github.jmkgreen.morphia.mapping.DefaultMapper.fromDb(DefaultMapper.java:531) Disconnected from the target VM, address: '127.0.0.1:56248', transport: 'socket' at com.github.jmkgreen.morphia.mapping.DefaultMapper.fromDBObject(DefaultMapper.java:273) at com.github.jmkgreen.morphia.query.MorphiaIterator.convertItem(MorphiaIterator.java:64) at com.github.jmkgreen.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:51) at com.github.jmkgreen.morphia.query.MorphiaIterator.next(MorphiaIterator.java:46) at com.github.jmkgreen.morphia.query.QueryImpl.get(QueryImpl.java:383) at com.github.jmkgreen.morphia.DatastoreImpl.get(DatastoreImpl.java:920) at com.github.jmkgreen.morphia.dao.BasicDAO.get(BasicDAO.java:174) at finderbots.recommenders.hadoop.mongo.MongoContext.verify(MongoContext.java:116) at finderbots.recommenders.hadoop.mongo.PersistMongoRecommendations.main(PersistMongoRecommendations.java:77) Caused by: java.lang.RuntimeException: java.lang.RuntimeException: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:150) at com.github.jmkgreen.morphia.mapping.DefaultMapper.readMappedField(DefaultMapper.java:551) at com.github.jmkgreen.morphia.mapping.DefaultMapper.fromDb(DefaultMapper.java:528) ... 9 more Caused by: java.lang.RuntimeException: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInst(DefaultCreator.java:122) at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:30) at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:40) at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:51) at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.readMapOrCollectionOrEntity(EmbeddedMapper.java:234) at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.readCollection(EmbeddedMapper.java:179) at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:123) ... 11 more Caused by: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair at com.github.jmkgreen.morphia.mapping.DefaultCreator.getNoArgsConstructor(DefaultCreator.java:147) at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInst(DefaultCreator.java:120) ... 17 more Caused by: java.lang.NoSuchMethodException: org.apache.mahout.common.Pair.() at java.lang.Class.getConstructor0(Class.java:2715) at java.lang.Class.getDeclaredConstructor(Class.java:1987) at com.github.jmkgreen.morphia.mapping.DefaultCreator.getNoArgsConstructor(DefaultCreator.java:143) ... 18 more

Process finished with exit code 1

pferrel avatar May 30 '13 20:05 pferrel

See my reply on the mailing list - possibly subclass com.github.jmkgreen.morphia.converters.TypeConverter to support Pair and at runtime add your new class to the list of converters in the Mapper of the Datastore.

On 30 May 2013 21:34, Pat Ferrel [email protected] wrote:

green's 1.3

I have a List of Pairs embedded in the class I save. Shouldn't this work?

private List<Pair<String, Float>> items;

INFO: LoggerImplFactory set to com.github.jmkgreen.morphia.logging.jdk.JDKLoggerFactory Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair at com.github.jmkgreen.morphia.mapping.DefaultMapper.fromDb(DefaultMapper.java:531) Disconnected from the target VM, address: '127.0.0.1:56248', transport: 'socket' at com.github.jmkgreen.morphia.mapping.DefaultMapper.fromDBObject(DefaultMapper.java:273) at com.github.jmkgreen.morphia.query.MorphiaIterator.convertItem(MorphiaIterator.java:64) at com.github.jmkgreen.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:51) at com.github.jmkgreen.morphia.query.MorphiaIterator.next(MorphiaIterator.java:46) at com.github.jmkgreen.morphia.query.QueryImpl.get(QueryImpl.java:383) at com.github.jmkgreen.morphia.DatastoreImpl.get(DatastoreImpl.java:920) at com.github.jmkgreen.morphia.dao.BasicDAO.get(BasicDAO.java:174) at finderbots.recommenders.hadoop.mongo.MongoContext.verify(MongoContext.java:116) at finderbots.recommenders.hadoop.mongo.PersistMongoRecommendations.main(PersistMongoRecommendations.java:77) Caused by: java.lang.RuntimeException: java.lang.RuntimeException: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:150) at com.github.jmkgreen.morphia.mapping.DefaultMapper.readMappedField(DefaultMapper.java:551) at com.github.jmkgreen.morphia.mapping.DefaultMapper.fromDb(DefaultMapper.java:528) ... 9 more Caused by: java.lang.RuntimeException: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInst(DefaultCreator.java:122) at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:30) at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:40) at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInstance(DefaultCreator.java:51) at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.readMapOrCollectionOrEntity(EmbeddedMapper.java:234) at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.readCollection(EmbeddedMapper.java:179) at com.github.jmkgreen.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:123) ... 11 more Caused by: com.github.jmkgreen.morphia.mapping.MappingException: No usable constructor for org.apache.mahout.common.Pair at com.github.jmkgreen.morphia.mapping.DefaultCreator.getNoArgsConstructor(DefaultCreator.java:147) at com.github.jmkgreen.morphia.mapping.DefaultCreator.createInst(DefaultCreator.java:120) ... 17 more Caused by: java.lang.NoSuchMethodException: org.apache.mahout.common.Pair.() at java.lang.Class.getConstructor0(Class.java:2715) at java.lang.Class.getDeclaredConstructor(Class.java:1987) at com.github.jmkgreen.morphia.mapping.DefaultCreator.getNoArgsConstructor(DefaultCreator.java:143) ... 18 more

Process finished with exit code 1

— Reply to this email directly or view it on GitHubhttps://github.com/jmkgreen/morphia/issues/70 .

jmkgreen avatar May 30 '13 20:05 jmkgreen

Adding a default constructor to the class you are using will fix this problem (I actually dont know why it works like that but it worked for me multiple times). But according to SOLID principles you cannot change the code in a class. You can try to add an extension and use it.

sajithads avatar Dec 02 '19 08:12 sajithads