Affects Version/s: None
Fix Version/s: None
Security Level: All
This issue is created automatically through a Github pull request on behalf of BenMorel:
Following [this discussion](https://groups.google.com/forum/#!topic/doctrine-dev/xKGzQcDkilE) on the mailing list, this is a first draft of a proposal to introduce a default lock mode for all entities loaded through an EntityManager.
At the moment, there is no way to set a lock mode for the following use cases:
- Proxies obtained through `getReference()` and then initialized
- Entities lazy-loaded through traversal of associations
This proposal introduces the idea of a default lock mode, which can be set at runtime when all reads in a transaction should be locking.
It works this way:
// load entities from EntityManager, Repositories or DQL, traverse associations, etc.
// all these entities will be loaded with the given lock mode
I have successfully tested it with the following use cases:
- DQL queries
- Lazy-loaded collections through OneToMany and ManyToMany associations
Before moving forward and writing proper unit tests, I'm looking for your feedback on this proposal. Is this a concept you would be happy to integrate in Doctrine?
If yes, I have a doubt as regards to where the default lock mode should be set: @Ocramius suggested to set it on the `Configuration`; this looked reasonable at first glance, and I have implemented it this way for now. It feels a tiny bit wrong though now that I see it, as I feel like the contents of the Configuration should should only be set during bootstrapping, rather than being set and reset in the controllers as in the example above. I might be wrong obviously.
My suggestion would be to move the default lock mode to the EntityManager, so that the code would become:
Happily waiting for your feedback!