Hi,
I'm having some difficulty with trying to reattach Tapestry-persisted
entities to Hibernate sessions. My main problem appears to be that I
need a "page-begin-processing" method to hook into that is earlier in
the request/response lifecycle than pageBeginRender().
I have done some searching on this matter, and while I've seen many
different wiki pages and posts that address similar concerns, I have not
found a solution for this problem yet. I apologize if I've overlooked
something.
I am using the pageBeginRender() method to reattach a persist="session"
object to the Hibernate Session:
public void pageBeginRender(PageEvent event)
{
SessionFactory sf = getContactDao().getSessionFactory();
Session s = sf.getCurrentSession();
s.update(getContact()); // contact is persisted property
}
This works fine when I am submitting the form, since the Contact entity
is reattached when the form rewinds -- and before my doStoreContact()
method is executed.
The problem is that I am using the same page to add/remove PhoneNumber
entities that are related to the Contact entity. Because the
PhoneNumber objects are stored in a Set in the entity, I want to
reattach the Contact and then remove the PhoneNumbers from the Set (and
cascading should take care of the rest). I created a
doRemovePhoneNumber() method, which is invoked by a DirectLink component
on the form page:
public void doRemovePhoneNumber(Integer id)
{
IContactDao = getContactDao(); // spring-injected
getContact().getPhoneNumbers().remove(dao.get(PhoneNumber.class, id));
dao.save(getContact()); // saveOrUpdate()
}
Unfortunately, when I invoke that method, I get an exception thrown from
my beginPageRender() method:
org.hibernate.NonUniqueObjectException: a different object with the same
identifier value was already associated with the session: [Contact#1]
When I looked into the matter, I noticed that pageBeginRender() is not
being invoked before the doRemovePhoneNumber() method, but only after it
has finished (and before the page rendered). While this makes sense, it
creates a problem for me because my pageBeginRender() method is trying
to reattach the object. I would really like to re-attach the object
immediately and then proceed to perform any operations on it.
So, is there a method that is invoked at the beginning of every
processing request that I could hook into to reattach my entity? Are
other people also dealing with similar issues in a better way?
Thanks in advance for any help -
Hans
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]