Queries using enums as parameters fail to translate them into the corresponding grid representation for MongoDB. Instead the enum type is passed through as is, raising an error in the datastore layer.
Example query:
session.createQuery( "select g from GuitarPlayer g where g.skill = :skill")
.setParameter( "skill", Skill.HIGH )
.list();
Exception:
java.lang.IllegalArgumentException: can't serialize class org.hibernate.ogm.datastore.mongodb.test.id.GuitarPlayer$Skill
at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:270)
at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:174)
at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:120)
at com.mongodb.DefaultDBEncoder.writeObject(DefaultDBEncoder.java:27)
at com.mongodb.OutMessage.putObject(OutMessage.java:289)
at com.mongodb.OutMessage.writeQuery(OutMessage.java:211)
at com.mongodb.OutMessage.query(OutMessage.java:84)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:307)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:295)
at com.mongodb.DBCursor._check(DBCursor.java:368)
at com.mongodb.DBCursor._hasNext(DBCursor.java:459)
at com.mongodb.DBCursor.hasNext(DBCursor.java:484)
at org.hibernate.ogm.datastore.mongodb.MongoDBDialect$MongoDBResultsCursor.hasNext(MongoDBDialect.java:860)
at org.hibernate.ogm.query.impl.OgmQueryLoader.listOfEntities(OgmQueryLoader.java:88)
at org.hibernate.ogm.query.impl.OgmQueryLoader.list(OgmQueryLoader.java:76)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:496)
at org.hibernate.ogm.query.impl.OgmQueryTranslator.list(OgmQueryTranslator.java:126)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:231)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1264)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103)
Apparently we're missing the type translation in this case.
|