[DDC-1984] ORM tries to fetch an already deleted versioned entity and fails with spl_object_hash error Created: 15/Aug/12  Updated: 01/May/13  Resolved: 01/May/13

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.2.2
Fix Version/s: 2.3.4
Security Level: All

Type: Bug Priority: Major
Reporter: Jaco Stienstra Assignee: Benjamin Eberlei
Resolution: Fixed Votes: 0
Labels: None


 Description   

This is a nasty bug, it doesn't always happen, and i can't seem to reproduce it consistently.

It sometimes happens when trying to fetch a versioned entity which doesn't exist anymore in the database.

Setup:
PHP 5.4.5
PostgreSQL 9.1
Doctrine 2.2.2 with array cache, XML mapping driver

Entity config: BaseEntity mapped as mapped-superclass, User entity extending the base entity:

Mapping file:

<mapped-superclass name="Specula\Entities\BaseEntity">

<field name="updatedOn" type="datetime" column="updated_on" />
<field name="version" version="true" type="integer" column="version" />

<many-to-one field="updatedBy" target-entity="User">
<join-column name="updated_by" referenced-column-name="user_id" />
</many-to-one>

</mapped-superclass>

User entity:

<entity name="Specula\Entities\User" table="users">
<id name="id" type="integer" column="user_id">
<generator strategy="AUTO" />
</id>

<field name="userName" type="string" column="username" length="20" />
<field name="passwordHash" type="string" column="password_hash" length="40" />
<field name="fullName" type="string" column="fullname" length="45" />
<field name="isAdmin" type="boolean" column="is_admin" />
<field name="isActive" type="boolean" column="is_active" />

</entity>

Relevant part of stack trace:

PHP Error [2]

spl_object_hash() expects parameter 1 to be object, null given (/var/www/html/repository/Doctrine/ORM/UnitOfWork.php:1318)

#0 unknown(0): CWebApplication->handleError()
#1 /var/www/html/repository/Doctrine/ORM/UnitOfWork.php(1318): spl_object_hash()
#2 /var/www/html/repository/Doctrine/ORM/UnitOfWork.php(2141): Doctrine\ORM\UnitOfWork->getEntityState()
#3 /var/www/html/repository/Doctrine/ORM/EntityRepository.php(145): Doctrine\ORM\UnitOfWork->lock()
#4 /var/www/html/repository/Doctrine/ORM/EntityManager.php(371): Doctrine\ORM\EntityRepository->find()
#5 /var/www/html/repository/Specula/Dao/BaseDao.php(103): Doctrine\ORM\EntityManager->find()
#6 /var/www/html/repository/Specula/Dao/UserDao.php(33): Specula\Dao\UserDao->findEntityById()
#7 /var/www/html/repository/Specula/Managers/UserManager.php(91): Specula\Dao\UserDao->findById()
#8 /var/www/html/repository/Doctrine/ORM/EntityManager.php(220): Specula\Managers\UserManager->Specula\Managers{closure}()
#9 /var/www/html/repository/Specula/Managers/UserManager.php(93): Doctrine\ORM\EntityManager->transactional()

Deleting the proxy, restarting webserver, restarting database server doesn't help. i'm using the array cache and apc is disabled.

If you need more information let me know i'm currently experiencing this bug so i can provide more information.

Best regards,

Jaco



 Comments   
Comment by Benjamin Eberlei [ 01/May/13 ]

Fixed in 2.3.4

Generated at Sat Aug 02 00:33:46 UTC 2014 using JIRA 6.2.3#6260-sha1:63ef1d6dac3f4f4d7db4c1effd405ba38ccdc558.