diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index 80915155d..2a458a3ce 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1684,6 +1684,7 @@ class UnitOfWork implements PropertyChangedListener case self::STATE_REMOVED: // Entity becomes managed again unset($this->entityDeletions[$oid]); + $this->addToIdentityMap($entity); $this->entityStates[$oid] = self::STATE_MANAGED; break; diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index df7256e44..d855c7817 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -302,6 +302,25 @@ class UnitOfWorkTest extends \Doctrine\Tests\OrmTestCase $this->_unitOfWork->computeChangeSet($metadata, $user); } + /** + * @group DDC-3619 + * @group 1338 + */ + public function testRemovedAndRePersistedEntitiesAreInTheIdentityMapAndAreNotGarbageCollected() + { + $entity = new ForumUser(); + $entity->id = 123; + + $this->_unitOfWork->registerManaged($entity, array('id' => 123), array()); + $this->assertTrue($this->_unitOfWork->isInIdentityMap($entity)); + + $this->_unitOfWork->remove($entity); + $this->assertFalse($this->_unitOfWork->isInIdentityMap($entity)); + + $this->_unitOfWork->persist($entity); + $this->assertTrue($this->_unitOfWork->isInIdentityMap($entity)); + } + /** * Data Provider *