mongodb - 吗啡的索引注释不起作用

标签 mongodb playframework-2.0 morphia mongodb-java

我对吗啡还很陌生,并且努力让索引注释发挥作用。我在静态 block 中创建数据源并在同一个 block 中调用 ensureIndexes,但它无法应用索引。如果我在保存对象之前放置该行,它就可以工作。

顺便说一下,我在 Java 中使用 playframework 2。

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; 
}

最佳答案

您需要映射您的实体类 - 按包或按类:

ds = new Morphia().mapPackage("com.test.entities").createDatastore(mongoClient, dbname);

关于mongodb - 吗啡的索引注释不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17763156/

相关文章:

javascript - 如何推迟读取直到写入完成?

javascript - 更新字符串子数组

scala - Play Framework/Scala 表单中特定于字段的错误消息

scala - Scala Play 中的状态是如何管理的! 2.0 网络套接字?

java - 如何从 MySQL 获取所需格式的 JSON

java - 在玩java mongodb时注入(inject)构造函数时出错

java - 我的对象未打印到我的 JavaFX TableView

json - jq无法解析MongoDB输出文档

java - 引用的延迟加载

mongodb - Playframework + Morphia + MongoDb + ElasticSearch = Disater?