On 8/23/07, p7k <[EMAIL PROTECTED]> wrote:
>
>
> Please, help me learn !!!
>
> I have the following situation:
>
> a Customer class with a collection of enums which represent weekdays {
> Sun,
> Mon , Tue , ... }
> ( in JSF, I bind these to a UISelectMany component - checkboxes )
>
> @Entity
> public class Customer extends BaseLocation implements Serializable {
> ...
> private List<DaysOfWeek> distDays = new ArrayList<DaysOfWeek>();
>
> @CollectionOfElements( targetElement = DaysOfWeek.class )
> @JoinTable( name = "Customer_DistDay" )
> @Enumerated( EnumType.STRING )
> @Column(name = "distDay", nullable = false)
> public List<DaysOfWeek> getDistDays() { return distDays; }
>
> public void setDistDays(List<DaysOfWeek> distDays) { this.distDays =
> distDays; }
> ...
> }
>
> I also have a CustomerForm action which is modeled exactly like appfuse's
> UserForm:
> * edit() to initialize the backBean to an existing customer if (id !=
> null)
> or to a new customer;
> * save(), which calls customer = customerDao.saveCustomer(customer) -
> saveOrUpdate() with a flush();
> * remove() calls remove from GenericDaoHibernate.
>
> I have been battling a long time to get the LazyLoading working:
> * First, I enabled
> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter for
> everything in my path:
> This got me the viewing power both in CustomerList and CustomerForm.
> Nayice!
> I can "add" a new Customer.
> I can't "update" (NonUniqueObjectException: a different object with the
> same identifier value was already associated with the session ... )
> I can't "delete"
> (org.springframework.dao.InvalidDataAccessApiUsageException: Write
> operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL) ...
> )
>
> * Second, without much thinking/understanding, I extended my
> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter with
> the
> recommended flush strategy from
> http://wiki.apache.org/myfaces/Hibernate_And_MyFaces
> http://wiki.apache.org/myfaces/Hibernate_And_MyFaces (it uses
> FlushMode.COMMIT):
> Now I got the views, "create" and "remove" working. SWELL
>
> BUT "update" does not work (NonUniqueObjectException: a different object
> with the same identifier value was already associated with the session ...
> ).
>
> I suppose it's because the session, which contained it, no longer exists.
> So, hibernate thinks I'm being stupid, maybe I am.
Usually the exception is thrown because the Session has previously loaded an
object with the same id and you are trying to save a new, disconnected
instance with exactly the same id. There are several ways to tackle this
(best approach is largely determined by what goes on in your
view/controller):
1) If all you are doing is adding objects to a list as part of your update,
e.g. adding a new day of the week to the list, then make sure you load the
day of the week from Hibernate before adding it to the list. That should
make sure it knows the object you are trying to save is already associated
with the session.
2) Use merge() rather than saveOrUpdate() as the method used to drive the
update in your DAO. Just be careful here - you MUST use the object returned
from the merge() method once it has been called, which means returning an
object from your save method:
e.g:
DayOfWeek dayOfWeek = new DayOfWeek();
dayOfWeek = dayOfWeekDao.save(dayOfWeek);
... continue using dayOfWeek instance.
Mike
Please, help !!
> --
> View this message in context:
> http://www.nabble.com/hibernate%3A-Lazy-Loading-101-tf4316007s2369.html#a12289186
> Sent from the AppFuse - User mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>