随机无法使用morphia createQuery获取嵌入的对象字段值

时间:2013-08-03 16:24:35

标签: java mongodb morphia

这是随机发生的,我无法预测它,需要帮助提出建议。使用MongoVUE查看Entity时,查看字段hash下面的简单Collection确实存在。在LinkedHashMap中插入10 slice'es工作正常,在查看MongoDb MOngoVUE中的数据库时一切正常。创建Query时,如果我插入10,我会得到10,但是在最后5(5,6,7 ..)上,字段hash为空。

Collection BatchClass只有一个文档,这就是我正在运行的测试。什么可以导致这种行为?

运行测试:在运行hash时,Query字段为空时,保存相同的数据5次,其中3次为空。(在MonGOVUE中,字段hash具有所需的值5次测试..

MongoDB是否有我可以调查的日志文件?

创建Query

Query<BatchClass> query = mongo.createQuery(BatchClass.class);
query.field(BatchClass.BATCHUUID).equal(theBatch.getBatchUuid());           
query.field(BatchClass.POSITION).equal(position);           
res = (BatchClass) query.get();

Entity

@Entity(noClassnameStored=true)
public final class BatchClass{

    @Id
    private ObjectId id;

    @Embedded
    private LinkedHashMap<Integer, Slice> sliceTable = null;

    public void insertSlice(int pos, Slice slice) {
        sliceTable.put(pos,slice);
    }

    public Map<Integer, Slice> getSliceTable() {
        return sliceTable;
    }

    @Entity(noClassnameStored=true)
    @Embedded
    public static class Slice
    {
        public int keyPosition; 
        public String sliceName;          
        public String  hash;  
        public int sliceFileSize;       
        public boolean completed = false;

    }
}

1 个答案:

答案 0 :(得分:0)

写入后30-60秒发生失败的读取操作。由于MongoDb以60秒的间隔刷新到磁盘,这可能是原因。