Hi Dimitrio

The solution(possibly) to your first problem are to call flush on your 
hibernate session. Altthough im far from a hibernate expert, this solved 
our problems with that kind of exception. You could also try merge(), im 
afraid im just guessing at this point.

regards Nino

Dimitrio wrote:
>
> Hello All,
>
> I am evaluating the possibility to use the Wicket / Spring / Hibernate 
> stack for my next project (Spring / Hibernate being used for the 
> middle tier + OpenSessionInViewFilter).
>
> Let me describe a simple test scenario that I am trying to implement - 
> a City Editor panel. The panel contains a text field with a city name 
> and a drop down choice with the available countries.
>
> The domain model (mapped to the DB via Hibernate) is the following:
>
> City
> ---------
> Long id;
> String name;
>
> @Cascade(SAVE_UPDATE)
> Country country;
>
> Country
> ------------
> Long id;
> String isoCode;
> String name;
>
> Upon construction, the Country drop down choice for the panel is 
> provided with a LoadableDetachableModel that loads a list of all 
> available countries from a CountryDao. The form itself has a 
> CompoundPropertyModel for the city being edited.
>
> The page renders just fine, the country list is correctly reloaded 
> upon F5 - everything as expected.
>
> However, when the user clicks Submit, the form component reloads the 
> country list again (so the list ends up in the new Hibernate session 
> cache) and when I try to save the city in onSubmit, I sometimes get a 
> Hibernate exception with the following message:
>
> a different object with the same identifier value was already 
> associated with the session: [test.wicket.Country#6]; nested exception 
> is org.hibernate.NonUniqueObjectException: a different object with the 
> same identifier value was already associated with the session: 
> [test.wicket.Country#6]
>
> This exception only occurs if the user does not change the city's 
> country. In that case the Country instance referenced by the city is 
> different from the corresponding instance in Hibernate session cache 
> and the SAVE_UPDATE cascading fails.
>
> So, my first question is whether there is a way to avoid this exception?
>
> The second thing is that I do not generally want all my reference data 
> being completely reloaded on every submit.
>
> I really liked the way property editors were used in Spring to 
> retrieve and validate reference data for such scenarios. In Spring I 
> would have a CountryPropertyEditor that would retrieve the Country 
> instance by an ISO code or ID and assign it to the city.
>
> So in Spring the submit would result in 2 statements like below:
>
> select from country where id=...
> update city where id=...
>
> and avoid the duplicate instances problem altogether.
>
> So, the second question is whether there is a way to not reload all 
> the reference data upon submit? How do you address such scenarios in 
> your Wicket applications?
>
>
> Many thanks!
>
> --Dimitrio
>
>
> ------------------------------------------------------------------------
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> ------------------------------------------------------------------------
>
> _______________________________________________
> Wicket-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/wicket-user
>   

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Wicket-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to