我必须限制processtemplate类中的某些字段。以下是我开发的方法。当我传递一些id时,它给了我运行时异常。请帮帮我
public ProcessTemplate get(String id) throws GRIDRecordsDataManagerException {
ProcessTemplate entity = null;
try {
BasicDBObject qry = new BasicDBObject();
Map<String, Object> whereMap = new HashMap<String, Object>();
whereMap.put("id", id);
qry.putAll(whereMap);
BasicDBObject field = new BasicDBObject();
field.put("name", 1);
field.put("status", 1);
field.put("description", 1);
DBCursor results = dbCollection.find(qry, field);
if (results != null && results.hasNext()) {
DBObject dbObj = results.next();
entity = new ProcessTemplate();
entity.setId((String) dbObj.get("id"));
entity.setProcessName((String) dbObj.get("name"));
entity.setStatus((String) dbObj.get("status"));
entity.setDescription((String) dbObj.get("description"));
System.out.println(entity);
}
} catch (Exception e) {
}
return entity;
}
答案 0 :(得分:1)
在特定字段上查询GridFS集合时,它在no时有效 GridFS文件曾存储在该集合中。保存文件后 对于集合,对特定字段的查询失败,并且“无法加载” 部分GridFSFile文件“。
...
现在我将重置与该集合相关联的对象,相当于一个 黑客但是:if(Objects.equal(GridFSDBFile.class, coll.getObjectClass())){coll.setObjectClass(null); }
...
嗨,一个集合可以有一个关联的ObjectClass和它 信息被缓存,允许它被设置一次然后重复使用 代码中的其他地方。一旦设置,您必须明确取消设置 它。 GridFS是用于存储和检索文件的规范 建立在司机的基础上。 GridFS对于它是如何发展持有自己的看法 使用,因此它为文件集合设置ObjectClass 您创建一个GridFS实例。它抛出错误的原因是 GridFSFile不会以您显示的方式使用 可以代表文件的部分部分,这就是它抛出的原因 “无法加载部分GridFSFile文件”运行时错误。就像你一样 发现相关的ObjectClass只能通过重置来取消设置 ObjectClass返回null。
在您的情况下,它被翻译为:
BasicDBObject qry = new BasicDBObject("id",id); //You can save 3 lines of code here, btw
BasicDBObject field = new BasicDBObject();
...
if (Objects.equal(GridFSDBFile.class, dbCollection.getObjectClass()))
dbCollection.setObjectClass(null);
DBCursor results = dbCollection.find(qry, field);
...