Hello, I'm writing an web application using Spring, Wicket and Hibernate. It's the first time I use this technologies, so forgive me if my question is trivial.
In my application i have a many to one relationship between Hotel and Room. On admin panel I'd like to have possibility to edit Hotel data - including modifying data of rooms that belong to this hotel. Unfortunately, when i try to save modified hotel, only it's data are changed - rooms stay they were before modification. And when i try to delete a room, i get an exception that says i try to delete detached entity (java.lang.IllegalArgumentException: Removing a detached instance pl.molejnik.hotbookings.model.Room#1). I've spent whole day looking for solutions for this, but I failed... I'd be very grateful if anyone could tell me what i am doing wrong. Here are relevant fragments of my code: Room.java: @ManyToOne(targetEntity = Hotel.class) @JoinColumn(name = "Hotel_id") private Hotel hotel; Hotel.java @OneToMany(mappedBy = "hotel", cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE }) private List<Room> rooms; DomainObjectModel public class DomainObjectModel<T extends DomainObject> extends LoadableDetachableModel { @SpringBean private IHotelbookingsService service; private final Class<T> type; private final Long id; public DomainObjectModel(Class<T> type, Long id) { InjectorHolder.getInjector().inject(this); this.type = type; this.id = id; } @SuppressWarnings("unchecked") public DomainObjectModel(T domainObject) { super(domainObject); InjectorHolder.getInjector().inject(this); this.type = (Class<T>) domainObject.getClass(); this.id = domainObject.getId(); } @Override protected Object load() { return service.load(type, id); } } EditHotelPanel.java public class EditHotelPanel extends Panel { private IModel model; private Form form; PageableListView rooms; @SpringBean IHotelbookingsService service; public EditHotelPanel(String id, Long hotelId) { super(id); this.setOutputMarkupId(true); model = new CompoundPropertyModel(new DomainObjectModel<Hotel>(Hotel.class, hotelId)); setModel(model); form = new Form("form"); form.setOutputMarkupId(true); form.add(new TextField("name")); form.add(new TextField("numberOfStars")); form.add(new TextField("address.city")); rooms = new PageableListView("rooms", ((Hotel)model.getObject()).getRooms(), 10) { @Override protected void populateItem(ListItem item) { DomainObjectModel<Room> m = new DomainObjectModel<Room>((Room) item.getModelObject()); final Room r = (Room) m.getObject(); item.add(new TextField("costPerNight", new PropertyModel(r, "costPerNight"))); item.add(new TextField("numberOfBeds", new PropertyModel(r, "numberOfBeds"))); item.add(new CheckBox("ensuite", new PropertyModel(r, "ensuite"))); item.add(new Link("deleteRoom"){ @Override public void onClick() { service.removeRoom(r); } }); } }; form.add(rooms); SubmitLink save = new SubmitLink("saveButton") { @Override public void onSubmit() { Hotel h = (Hotel)model.getObject(); service.saveHotel(h); setResponsePage(Index.class); } }; form.add(save); add(form); } } EditHotelPanel.html <html xmlns:wicket> <body> <wicket:panel> <form wicket:id="form"> Nazwa: <input type="text" wicket:id="name"/> <br/> Liczba gwiazdek: <input type="text" wicket:id="numberOfStars"/> <br/> Miasto: <input type="text" wicket:id="address.city"/> <br/> <div> Pokoje: <br/> <div> Liczba miejsc Cena Lazienka </div> <div wicket:id="rooms"> <input type="text" wicket:id="numberOfBeds"/> <input type="text" wicket:id="costPerNight"/> <input type="checkbox" wicket:id="ensuite"/> # Usuń </div> </div> <input type="submit" value="Zapisz" wicket:id="saveButton"/> </form> </wicket:panel> </body> </html> Best regards, Michał Olejnik -- View this message in context: http://www.nabble.com/Problem-with-detaching-elements-tp20763305p20763305.html Sent from the Wicket - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]