I should clarify that last paragraph: I don't know Wicket well enough to be sure you haven't found a bug and of course I don't know your code. I've just run into this often enough in Hibernate to make an educated guess. Let us know how it works out.
-Ryan On Feb 18, 2007, at 2:08 AM, Ryan Holmes wrote: > org.hibernate.NonUniqueObjectException is a really common problem. My > guess is that the DataStoreUser is being loaded once to pass it into > the page constructor and again by the LoadableDetachableModel within > the same Hibernate session. Same persistent object loaded into two > separate instance variables in the same (Hibernate) session -- boom, > NonUniqueObjectException. > > There are a couple of ways to fix this. The "correct" solution is to > avoid loading the object more than once in the first place. For > instance, maybe you could take a user id instead of a user object > into your page constructor to remove one of the load operations. The > standard solution is to use Session.merge() instead of, say, > Session.saveOrUpdate() (I assume you're getting this exception when > the Hibernate session flushes). > > In any event, this is happening because LoadableDetachableModel is > working as intended and thereby revealing one of Hibernate's many > "quirks" -- not because of a problem in Wicket. > > > -Ryan > On Feb 10, 2007, at 2:31 AM, Matthew Kwong wrote: > >> >> Hi fellows, >> >> Last time I asked how to use chain in CompoundPropertyModel with >> LoadableDetachableModel, it worked since my page has no form (no >> submit). >> This time, I make another page and try to use the chain again, and >> hibernate >> throws org.hibernate.NonUniqueObjectException when I submit the form. >> >> Caused by: org.hibernate.NonUniqueObjectException: a different >> object with >> the same identifier value was already associated with the session: >> [datastore2.model.DataStoreRole#1] >> >> My Panel: >> >> public UserDetail(String id, DataStoreUser user, final Panel >> prevPanel) { >> super(id); >> add(new FeedbackPanel("feedback")); >> >> add(new Link("back") { >> public void onClick() { >> getParent().replaceWith(prevPanel); >> } >> }); >> >> Form form = new Form("form") { >> protected void onSubmit() { >> DataStoreUser user = (DataStoreUser) >> this.getModelObject(); >> try { >> getDelegate().saveUser(user); >> info("You have saved the user profile: " + >> user.getFullname() + "."); >> } catch (Exception e) { >> e.printStackTrace(); >> error("Your user profile state is stale >> (someone has >> updated the same user profile while you are on this page). Please >> press BACK >> and come back."); >> } >> } >> }; >> >> form.setModel(new CompoundPropertyModel(new >> LoadableDataStoreUserModel(getDelegate().getDataStoreUser(user.getId >> ())))); >> form.add(new Label("id")); >> form.add(new Label("username")); >> form.add(new RequiredTextField("firstname")); >> form.add(new >> TextField("lastname").setConvertEmptyInputStringToNull(false)); >> form.add(new Label("email")); >> form.add(new Palette("roles", new >> Model((Serializable)getDelegate().getDataStoreRoles()), new >> RoleChoiceRenderer(), 10, true)); >> add(form); >> } >> >> Is LoadableDetachableModel working for form processing? Because it is >> working if I only have >> form.setModel(new >> CompoundPropertyModel(getDelegate().getDataStoreUser(user.getId()))); >> >> The reason why i want this loadable since I want to update the page >> with >> "F5" refresh button again if someone has changed the same user in >> another >> computer. >> >> Thank you :) >> Matthew Kwong >> -- >> View this message in context: http://www.nabble.com/ >> LoadableDetachableModel-in-form-processing-tf3204839.html#a8899449 >> Sent from the Wicket - User mailing list archive at Nabble.com. >> >> >> --------------------------------------------------------------------- >> - >> --- >> Using Tomcat but need to do more? Need to support web services, >> security? >> Get stuff done quickly with pre-integrated technology to make your >> job easier. >> Download IBM WebSphere Application Server v.1.0.1 based on Apache >> Geronimo >> http://sel.as-us.falkag.net/sel? >> cmd=lnk&kid=120709&bid=263057&dat=121642 >> _______________________________________________ >> Wicket-user mailing list >> Wicket-user@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/wicket-user > > > ---------------------------------------------------------------------- > --- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to > share your > opinions on IT & business topics through brief surveys-and earn cash > http://www.techsay.com/default.php? > page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Wicket-user mailing list > Wicket-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/wicket-user ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Wicket-user mailing list Wicket-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wicket-user