* java.lang.String, com.impetus.kundera.metadata.EntityMetadata)
*/
@Override
public Object find(Class entityClass, Object key)
{
EntityMetadata entityMetadata = KunderaMetadataManager.getEntityMetadata(kunderaMetadata, entityClass);
List<String> relationNames = entityMetadata.getRelationNames();
BasicDBObject query = new BasicDBObject();
MetamodelImpl metaModel = (MetamodelImpl) kunderaMetadata.getApplicationMetadata().getMetamodel(
entityMetadata.getPersistenceUnit());
AbstractManagedType managedType = (AbstractManagedType) metaModel.entity(entityMetadata.getEntityClazz());
if (metaModel.isEmbeddable(entityMetadata.getIdAttribute().getBindableJavaType()))
{
MongoDBUtils.populateCompoundKey(query, entityMetadata, metaModel, key);
}
else
{
query.put("_id", MongoDBUtils.populateValue(key, key.getClass()));
}
// For secondary tables.
List<String> secondaryTables = ((DefaultEntityAnnotationProcessor) managedType.getEntityAnnotation())
.getSecondaryTablesName();
secondaryTables.add(entityMetadata.getTableName());
Object enhancedEntity = null;
Map<String, Object> relationValue = null;
// Here you need to fetch by sub managed type.
EntityType entityType = metaModel.entity(entityMetadata.getEntityClazz());
for (String tableName : secondaryTables)
{
DBCollection dbCollection = mongoDb.getCollection(tableName);
KunderaCoreUtils.printQuery("Find document:" + query, showQuery);
DBObject fetchedDocument = dbCollection.findOne(query);
if (fetchedDocument != null)
{
List<AbstractManagedType> subManagedType = ((AbstractManagedType) entityType).getSubManagedType();
EntityMetadata subEntityMetadata = null;
if (!subManagedType.isEmpty())
{
for (AbstractManagedType subEntity : subManagedType)
{
String discColumn = subEntity.getDiscriminatorColumn();
String disColValue = subEntity.getDiscriminatorValue();
Object value = fetchedDocument.get(discColumn);
if (value != null && value.toString().equals(disColValue))
{
subEntityMetadata = KunderaMetadataManager.getEntityMetadata(kunderaMetadata,
subEntity.getJavaType());
break;
}
}
enhancedEntity = instantiateEntity(subEntityMetadata.getEntityClazz(), enhancedEntity);
relationValue = handler.getEntityFromDocument(subEntityMetadata.getEntityClazz(), enhancedEntity,
subEntityMetadata, fetchedDocument, subEntityMetadata.getRelationNames(), relationValue,
kunderaMetadata);
}
else
{
enhancedEntity = instantiateEntity(entityClass, enhancedEntity);