Hibernate also seems to always assume objects from different sessions are dirty. (I'm using saveOrUpdate() in 1.2.5. Maybe this has changed in 2.*?)
Anyway, I need to work around this to be able to use Hibernate in a 3-tier system. I can only have SQL created when an object is really dirty since there are triggers in the database. So here are the changes I think could accomplish my goals: 1) Upgrade to 2.* so I can use the latest features on the Interceptor 2) Add code to handle unsaved-values correctly on objects with composite-ids. 3) Modify SessionImpl to bypass Collection updating in removeCollectionsFor() and prepareCollectionsForUpdate() (I mentioned this in the last post). 4) Add a method to our base Domain Object class to return dependent objects. Each domain object class will then need to return the collections of objects that need to get updated when it is updated. This will be a manual work around for cascading on collections since I disabled that in step #3 5) Modify my transaction management code to set WAIT_FOR_COMMIT = true during the transactions since we can't control the order dependent objects get because of #3 & #4. 6) Add methods to our base Domain Object class to capture the original value of a property when it changes. The Domain Object class will then have a has map with the original values of only the properties that changed. If the map is empty, the object is not dirty. 7) In Intercepter.findDirty(), determine the properties that changed based on #6. If this works, the only changes I'd have to make in Hibernate proper would be a switch to disable the collections stuff. The rest would be in a custom Interceptor and my code. Please let me know if this looks like a reasonable way to make Hibernate function in a 3-tier environment. Thanks, John -----Original Message----- From: Urberg, John [mailto:[EMAIL PROTECTED] Sent: Thursday, October 16, 2003 11:21 AM To: '[EMAIL PROTECTED]' Subject: [Hibernate] Saving Collections from Multiple Sessions We have a 3-tier Java GUI application using Hibernate as the O/R mapping layer. We've run into the problem of dealing with updating collections from other sessions. It seems Hibernate will recreate the collection if the collection was loaded with a different persisted (see SessionImpl.prepareCollectionForUpdate()). This is always the case in my app since we send domain objects to the client and then send them back to the server to be updated. I'm thinking about doing the following to work around this until I can come up with a better idea: 1) Add a "ignoreCollections" flag to Session with a default of false. When set to true, it will skip the prepareCollectionsForUpdate method. 2) Classes with collections that need to be updated will implement the Lifecycle interface and manually cascade the changes. Does this sound like a workable solution? Regards, John Urberg Software is not limited by physics, like buildings are. It is limited by imagination, by design, by organization. In short, it is limited by properties of people, not by properties of the world. "We have met the enemy, and he is us." - Ralph Johnson ------------------------------------------------------- This SF.net email is sponsored by: SF.net Giveback Program. SourceForge.net hosts over 70,000 Open Source Projects. See the people who have HELPED US provide better services: Click here: http://sourceforge.net/supporters.php _______________________________________________ hibernate-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/hibernate-devel ------------------------------------------------------- This SF.net email is sponsored by: SF.net Giveback Program. SourceForge.net hosts over 70,000 Open Source Projects. See the people who have HELPED US provide better services: Click here: http://sourceforge.net/supporters.php _______________________________________________ hibernate-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/hibernate-devel