diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 5088bb273..76ce5219a 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1509,7 +1509,9 @@ class UnitOfWork implements PropertyChangedListener switch ($this->getEntityState($entity, self::STATE_DETACHED)) { case self::STATE_MANAGED: - $this->removeFromIdentityMap($entity); + if ($this->isInIdentityMap($entity)) { + $this->removeFromIdentityMap($entity); + } unset($this->entityInsertions[$oid], $this->entityUpdates[$oid], $this->entityDeletions[$oid], $this->entityIdentifiers[$oid], $this->entityStates[$oid], $this->originalEntityData[$oid]); diff --git a/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php b/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php index a993606cf..30069a37b 100644 --- a/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/DetachedEntityTest.php @@ -173,5 +173,23 @@ class DetachedEntityTest extends \Doctrine\Tests\OrmFunctionalTestCase $this->assertType('Doctrine\Tests\Models\CMS\CmsUser', $newUser); $this->assertEquals('gblanco', $newUser->username); } + + /** + * @group DDC-920 + */ + public function testDetachManagedUnpersistedEntity() + { + $user = new CmsUser; + $user->name = 'Guilherme'; + $user->username = 'gblanco'; + $user->status = 'developer'; + + $this->_em->persist($user); + $this->_em->detach($user); + + $this->_em->flush(); + + $this->assertNull($user->id); + } }