Just another hint: Have you added a index for the 'id'-field?
Otherwise the unique constrain doesn't work.

On Jul 7, 5:03 pm, Gamlor <gamlerh...@gmail.com> wrote:
> Hi. I've answered this also on the db4o forum. This is a copy of my
> answer:
>
> Which version of db4o are you using?
>
> To me that looks like some kind of regression / accidental API
> breakage. Instead of the UniqueFieldValueConstraintViolationException
> the EventException is thrown. The unique-field detection is just
> another event handler. So it looks like the original
> UniqueFieldValueConstraintViolationException is hidden by the event-
> exception
>
> Try to catch the  EventException an check if the .getCause() is a
> UniqueFieldValueConstraintViolationException.
>
> In general the   UniqueFieldValueConstraintViolationException  should
> be the last 'barrier' before violating the constrain. If you know that
> you probably will insert a doublicate then I recommend to first check
> if that id isn't used yet.
>
> On Jun 22, 3:29 pm, imran ali <imran...@gmail.com> wrote:
>
>
>
> >  Hi All,
>
> > in one of my application i have been downloading lots of data from
> > server and then saving in to db4o.
>
> > in my case i am saving 200 objects of Recipe class in loops, and on
> > every  200 store, i am using commit().
>
> > in Recipe Class i have define id as unique as follows
>
> > configuration.common().add(new
> > UniqueFieldValueConstraint(Recipe.class, "id"));
> > when i have been commiting after 200 stor,e it has been throwing
> > exception,code at comit is as follows
>
> >   public void commitdb()
>
> >                   {
>
> >                          try
>
> >                          {
>
> >                         oc.commit(); // oc is object of objectContainer
>
> >                   }
>
> >         catch(UniqueFieldValueConstraintViolationException exp)
>
> >                         { oc.rollback();         }
>
> > }
>
> > Still i am getting exception as follows, (i am using db4o on Android)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):
> > com.db4o.events.EventException
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.events.EventRegistryImpl.withExceptionHandlingInCallback(­­EventRegistryImpl.java:
> > 283)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.events.EventRegistryImpl.commitOnStarted(EventRegistryImp­­l.java:
> > 121)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.LocalTransaction.dispatchCommittingCallback(LocalTransact­­ion.java:
> > 90)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.LocalTransaction.commit(LocalTransaction.java:65)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.LocalTransaction.commit(LocalTransaction.java:59)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.LocalObjectContainer.commit1(LocalObjectContainer.java:
> > 104)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.IoAdaptedObjectContainer.commit1(IoAdaptedObjectContainer­­.java:
> > 171)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.ObjectContainerBase$3.apply(ObjectContainerBase.java:
> > 403)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.ObjectContainerBase$3.apply(ObjectContainerBase.java:
> > 401)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.ObjectContainerBase.asTopLevelCall(ObjectContainerBase.ja­­va:
> > 427)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.ObjectContainerBase.commit(ObjectContainerBase.java:
> > 401)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.ExternalObjectContainer.commit(ExternalObjectContainer.ja­­va:
> > 39)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.altaworks.kokaihop.db4o.RecipeProvider.commitdb(RecipeProvider.java:
> > 42)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.altaworks.kokaihop.ui.TakeoffActivity$4.run(TakeoffActivity.java:
> > 707)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > java.lang.Thread.run(Thread.java:1096)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823): Caused by:
> > java.lang.NullPointerException
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.constraints.UniqueFieldValueConstraint
> > $1.ensureSingleOccurence(UniqueFieldValueConstraint.java:59)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.constraints.UniqueFieldValueConstraint
> > $1.onEvent(UniqueFieldValueConstraint.java:96)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.events.Event4Impl.trigger(Event4Impl.java:78)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.events.EventRegistryImpl
> > $4.run(EventRegistryImpl.java:123)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.foundation.DynamicVariable.with(DynamicVariable.java:54)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.InCallback.run(InCallback.java:24)
>
> > 06-22 18:30:41.568: ERROR/AndroidRuntime(14823):     at
> > com.db4o.internal.events.EventRegistryImpl.withExceptionHandlingInCallback(­­EventRegistryImpl.java:
> > 279)
>
> > What should be solution, i have to store all 200 objects, and if
> > already object is present with same id, then over-write with new
> > object?
>
> > Regards
> > Imran ali

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to