Я новичок в морфии и изо всех сил пытаюсь заставить работать аннотацию индекса. Я создаю источник данных в статическом блоке и вызываю в том же блоке sureIndexes, но не удается применить индексы. Если я поставлю строку прямо перед сохранением объекта, он сработает.
Кстати, я использую playframework 2 с Java.
public class MongoService {
static private MongoClient mongoClient = null;
static Datastore ds = null;
static {
MorphiaLoggerFactory.reset();
MorphiaLoggerFactory.registerLogger(com.google.code.morphia.logging.slf4j.SLF4JLogrImplFactory.class);
try {
Logger.debug("mongo uri:" + mongoUri);
MongoClientURI uri = new MongoClientURI(mongoUri);
mongoClient = new MongoClient(uri);
ds = new Morphia().createDatastore(mongoClient, dbname);
ds.ensureIndexes();
ds.ensureCaps();
}catch(Exception e) {
Logger.error("exception:" + e.fillInStackTrace());
}
}
public static User insertUser(User user) {
//ds.ensureIndexes(); //UNCOMMENTING THIS LINE MAKES IT WORK
ds.save(user);
return user;
}
Это реализация пользовательского класса:
@Entity(noClassnameStored = true)
public class User {
@Id private ObjectId id;
@Indexed(value=IndexDirection.ASC, name="email", unique=true, dropDups=true)
public String email;
}