/** * @param type * @param background * @param fields * @param <T> */ public <T> void ensureIndex(Class<T> type, boolean background, IndexFieldDef... fields) { ensureIndex(type, null, fields, false, false, background); }
/** * Ensure indexes from field annotations, and embedded entities. * @param mc * @param background * @param parentMCs * @param parentMFs */ private void ensureIndexesFromFieldsAndEmbeddedEntities(MappedClass mc, boolean background, ArrayList<MappedClass> parentMCs, ArrayList<MappedField> parentMFs) { for (MappedField mf : mc.getMappedFields()) { Class<?> indexedClass = (parentMCs.isEmpty() ? mc : parentMCs.get(0)).getClazz(); String field = getFullFieldName(parentMCs, parentMFs, mf); if (mf.hasAnnotation(Indexed.class)) { Indexed index = mf.getAnnotation(Indexed.class); ensureIndex(indexedClass, index.name(), new BasicDBObject(field.toString(), index.value().toIndexValue()), index.unique(), index.dropDups(), index.background() ? index.background() : background, index.sparse() ? index.sparse() : false, index.expireAfterSeconds()); } if (mf.hasAnnotation(SimpleTextIndex.class)) { createTextIndex(mf, indexedClass, field); } if (!mf.isTypeMongoCompatible() && !mf.hasAnnotation(Reference.class) && !mf.hasAnnotation(Serialized.class)) { ArrayList<MappedClass> newParentClasses = (ArrayList<MappedClass>) parentMCs.clone(); ArrayList<MappedField> newParents = (ArrayList<MappedField>) parentMFs.clone(); newParentClasses.add(mc); newParents.add(mf); ensureIndexes(mapr.getMappedClass(mf.isSingleValue() ? mf.getType() : mf.getSubClass()), background, newParentClasses, newParents); } } }
/** * @param type * @param fields * @param <T> */ public <T> void ensureIndex(Class<T> type, String fields) { ensureIndex(type, null, fields, false, false); }
/** * @param clazz * @param name * @param defs * @param unique * @param dropDupsOnCreate * @param <T> */ public <T> void ensureIndex(Class<T> clazz, String name, IndexFieldDef[] defs, boolean unique, boolean dropDupsOnCreate) { ensureIndex(clazz, name, defs, unique, dropDupsOnCreate, false); }
/** * @param type * @param fields * @param <T> */ public <T> void ensureIndex(Class<T> type, IndexFieldDef... fields) { ensureIndex(type, null, fields, false, false); }
/** * @param clazz * @param name * @param fields * @param unique * @param dropDupsOnCreate * @param <T> */ public <T> void ensureIndex(Class<T> clazz, String name, String fields, boolean unique, boolean dropDupsOnCreate) { ensureIndex(clazz, name, QueryImpl.parseFieldsString(fields, clazz, mapr, true), unique, dropDupsOnCreate, false, false, -1); }
/** * @param clazz * @param name * @param fields * @param unique * @param dropDupsOnCreate * @param background * @param <T> */ public <T> void ensureIndex(Class<T> clazz, String name, String fields, boolean unique, boolean dropDupsOnCreate, boolean background) { ensureIndex(clazz, name, QueryImpl.parseFieldsString(fields, clazz, mapr, true), unique, dropDupsOnCreate, background, false, -1); }
/** * @param type * @param name * @param dir * @param <T> */ public <T> void ensureIndex(Class<T> type, String name, IndexDirection dir) { ensureIndex(type, new IndexFieldDef(name, dir)); }
/** * @param clazz * @param name * @param defs * @param unique * @param dropDupsOnCreate * @param background */ @SuppressWarnings({"rawtypes"}) public void ensureIndex(Class clazz, String name, IndexFieldDef[] defs, boolean unique, boolean dropDupsOnCreate, boolean background) { BasicDBObjectBuilder keys = BasicDBObjectBuilder.start(); for (IndexFieldDef def : defs) { String fieldName = def.getField(); IndexDirection dir = def.getDirection(); keys.add(fieldName, dir.toIndexValue()); } ensureIndex(clazz, name, (BasicDBObject) keys.get(), unique, dropDupsOnCreate, background, false, -1); }
/** * Ensure indexes from class annotation * @param mc * @param background */ private void ensureIndexesFromClassAnnotation(MappedClass mc, boolean background) { ArrayList<Annotation> idxs = mc.getAnnotations(Indexes.class); if (idxs != null) for (Annotation ann : idxs) { Indexes idx = (Indexes) ann; if (idx != null && idx.value() != null && idx.value().length > 0) for (Index index : idx.value()) { BasicDBObject fields = QueryImpl.parseFieldsString(index.value(), mc.getClazz(), mapr, !index.disableValidation()); ensureIndex(mc.getClazz(), index.name(), fields, index.unique(), index.dropDups(), index.background() ? index.background() : background, index.sparse() ? index.sparse() : false, index.expireAfterSeconds()); } } }