/**
  * Gets an entity instance.
  *
  * @param array  $data     The instance data.
  * @param string $dqlAlias The DQL alias of the entity's class.
  *
  * @return object The entity.
  *
  * @throws HydrationException
  */
 private function getEntity(array $data, $dqlAlias)
 {
     $className = $this->_rsm->aliasMap[$dqlAlias];
     if (isset($this->_rsm->discriminatorColumns[$dqlAlias])) {
         $fieldName = $this->_rsm->discriminatorColumns[$dqlAlias];
         if (!isset($this->_rsm->metaMappings[$fieldName])) {
             throw HydrationException::missingDiscriminatorMetaMappingColumn($className, $fieldName, $dqlAlias);
         }
         $discrColumn = $this->_rsm->metaMappings[$fieldName];
         if (!isset($data[$discrColumn])) {
             throw HydrationException::missingDiscriminatorColumn($className, $discrColumn, $dqlAlias);
         }
         if ($data[$discrColumn] === "") {
             throw HydrationException::emptyDiscriminatorValue($dqlAlias);
         }
         $discrMap = $this->_metadataCache[$className]->discriminatorMap;
         if (!isset($discrMap[$data[$discrColumn]])) {
             throw HydrationException::invalidDiscriminatorValue($data[$discrColumn], array_keys($discrMap));
         }
         $className = $discrMap[$data[$discrColumn]];
         unset($data[$discrColumn]);
     }
     if (isset($this->_hints[Query::HINT_REFRESH_ENTITY]) && isset($this->rootAliases[$dqlAlias])) {
         $this->registerManaged($this->_metadataCache[$className], $this->_hints[Query::HINT_REFRESH_ENTITY], $data);
     }
     $this->_hints['fetchAlias'] = $dqlAlias;
     return $this->_uow->createEntity($className, $data, $this->_hints);
 }