Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] UDPATE: Cascading object occasionally dont update/merge, but throw exception. Eclipselink or my bug?

Turn on SQL logging to get an idea of what is occurring.  Also include the
SQL trace for a failed operation.  You should also trun batch writing off to
help debugging.

If you remove the @PrivateOwned from A's bList, does the issue still occur?

My guess as to what is occurring is that because the bList is marked as
@PrivateOwned, when you clear of remove from it the B will be deleted.  But
the B's nextA is not private owned, so it will not be deleted, so the next
insert of the B with the same A will give you the error.

Maybe also mark nextA as @PrivateOwned.

Raven McSmith wrote:
> This is the errormessage:
> Internal Exception: java.sql.BatchUpdateException:
> The statement was aborted because it would have caused a duplicate key
> value in a unique or primary key constraint or unique index identified
> by 'SQLxxxxxxxxxxxxxxx' defined on 'A'.
> Error Code: 20000
> Query: UpdateObjectQuery(a)
> On Fri, Apr 23, 2010 at 8:24 AM, Raven McSmith
> <ravenmcsmith@xxxxxxxxxxxxxx> wrote:
>> Hi,
>> I am having the problem that my object from a cascaded class model
>> _sometimes_ don't update/merge but throw an exception.
>> This only happens after objects have been persisted and are now (to a
>> bigger extend) updated, changed, modified. Small modifications will
>> work fine.
>> I will give an descriptive example after the model.
>> My model looks almost like his:
>> class a
>> @Entity
>> public class A implements Serializable {
>>          @Id
>>          @GeneratedValue(strategy = GenerationType.TABLE)
>>          private int id;
>>          private String name;
>>          @OneToMany(cascade=CascadeType.ALL)
>>          @PrivateOwned
>>          private List bList = new ArrayList();
>> ....
>> }
>> class b
>> @Entity
>> public class B implements Serializable {
>>          @Id
>>          @GeneratedValue(strategy = GenerationType.TABLE)
>>          private int id;
>>          ...
>>         @OneToOne(cascade=CascadeType.ALL)
>>         private A  nextA;
>> ....
>> }
>> My program code makes sure that there is never a cycle in the objects.
>> Meaning that no nextA will have an entry of object A where it is self
>> defined.
>> My problem is not adding objects but deleting/modifying them.
>> Example:
>> When I have several of these object persisted and I am now changing
>> one instance of A which had 4 entries in bList, and I am going to
>> clear bList and try to merge(), flush() the object, I will get an
>> exception, saying that there are duplicate entries for the key ID from
>> object A.
>> If I just remove one object from the list and the merge() or flush()
>> the object with Eclipselink the operation works fine.
>> Similarly I think is the situation when changing entries in bList.
>> This is really hard to debug, so I just can guess. If I change many
>> things (excluding adding), then sometimes the merge(), flush()
>> operation throws an exception, but it is just sometimes, so really
>> hard to debug.
>> Do you know any solution to this problem?
>> Is it my fault or did I find a bug in Eclipselink?
>> Thanks
>> Raven
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx

----- James Sutherland
 EclipseLink ,
Wiki: EclipseLink , TopLink 
Forums: TopLink , EclipseLink 
Book: Java Persistence 
View this message in context:
Sent from the EclipseLink - Users mailing list archive at

Back to the top