Details
-
Type:
Bug
-
Status:
Resolved
-
Priority:
Critical
-
Resolution: Fixed
-
Affects Version/s: 2.3.2
-
Fix Version/s: None
-
Component/s: ORM
-
Security Level: All
-
Labels:None
Description
Following the changes for DDC-1690, I encountered a serious bug in how EntityManager::merge(...) functions for entities that use NOTIFY change tracking. It's related to interaction between lazy loading and calls to addPropertyChangedListener().
Scenario:
- EntityA has a One-To-One, lazy-load association to EntityB
- EntityB implements NotifyPropertyChanged and uses change tracking policy "NOTIFY"
Steps to reproduce:
- $instanceA = $em->find('EntityA', $id)
- $em->clear()
- $instanceA = $em->merge($instanceA)
- $instanceA->getB() will return a proxy for B that is marked as initialized by contains no data
Workaround: Mark EntityB::addPropertyChangedListener(...) as 'final', so it doesn't get proxied and lazy loading is not triggered.
Activity
Marco Pivetta
made changes -
| Field | Original Value | New Value |
|---|---|---|
| Assignee | Benjamin Eberlei [ beberlei ] | Marco Pivetta [ ocramius ] |
Marco Pivetta
made changes -
| Status | Open [ 1 ] | Awaiting Feedback [ 10000 ] |
Marco Pivetta
made changes -
| Status | Awaiting Feedback [ 10000 ] | In Progress [ 3 ] |
Marco Pivetta
made changes -
| Status | In Progress [ 3 ] | Resolved [ 5 ] |
| Resolution | Fixed [ 1 ] |
This list may be incomplete, as errors occurred whilst retrieving source from linked applications:
- Request to http://www.doctrine-project.org/fisheye/ failed: Error in remote call to 'FishEye 0 (http://www.doctrine-project.org/fisheye/)' (http://www.doctrine-project.org/fisheye) [AbstractRestCommand{path='/rest-service-fe/search-v1/crossRepositoryQuery', params={query=DDC-2230, expand=changesets[-21:-1].revisions[0:29],reviews}, methodType=GET}] : Received status code 503 (Service Temporarily Unavailable)
Also, the returned proxy from $instanceA->getB() is in the entityStates array but not in the identity map