From: Tomasz B. (JIRA) <no...@at...> - 2006-05-08 19:46:31
|
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-1725?page=comments#action_23044 ] Tomasz Bech commented on HHH-1725: ---------------------------------- Spec is not allowing it explicitly because the authors maybe didn't realized that somehow it can be prohibited in implementation (and in case of Hibernate it is only prohibited for lazy properties). Can you describe more precise why it would be inefficient? First of all I don't understand the reason of the exception when collection is not processed - why there is an exception, what it means exactly and how it helps developers? We are thinking currently of commenting the exception, but we have no feeling how dangerous it could be. And if reading lazy properties in event is prohibited why the exception is not thrown immidiately at the place when happens but at the end of flush (and finding 'wrong' call place is huge job)? About inefficiency. As I wrote I see in fact one solution - full 'not-lazy' of whole object graph can only work - I cannot imagine more inefficient solution. > lazy properties, events and collection xxx was not processed by flush exception and EJB3 incompatibility > -------------------------------------------------------------------------------------------------------- > > Key: HHH-1725 > URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1725 > Project: Hibernate3 > Type: Bug > Components: core > Versions: 3.2.0.cr2 > Reporter: Tomasz Bech > > > It is realted to anomaly: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1540 > 'When using custom event listeners, sometimes you mess with (and initialize) lazy collections by mistake, which causes CollectionEntry.postFlush(PersistentCollection) to throw an AssertionFailure' > It is questionable why AT ALL exception is raised in this case! > What is the most important: EJB3 spec is not prohibiting to check/read/ object involved in the event, so current implementation is agains EJB3 spec. > Events are often used for validation so it is quite probable that the lazy property (collection) has to be accessed - and when it is lazy and not initialized before the exception is raised. Why hibernate cannot treat it in nicer way and allow such actions. > One workaround is to not-use-lazy (very bad). > Second workaround: in the code outside flush (not in event) pre-initialize all lazy properties (in fact simulation of 'not-lazy). -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |