It's all about the answers!

Ask a question

Duplicate key value while saving a Jazz component


m sawires (1462268) | asked Jan 15 '10, 10:18 p.m.
Hello,
I've created a simple ecore model with one class "MyResource" for a Jazz component but when I save it using the code snippet below I get this SQL error:

SQL: INSERT INTO MY_RESOURCE.MY_RESOURCE (STATE_ID, ITEM_ID, CONTEXT_ID, MODIFIED, MODIFIED_BY_ITEM_ID, ID, NAME, CONTENT_INTERNAL_ID, CONTENT_CONTENT_LENGTH, CONTENT_CONTENT_TYPE, CONTENT_CHECKSUM, CREATION_DATE, CREATOR_ITEM_ID, PROJECT_AREA_ITEM_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
SQL Exception #1
SQL Message: 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 'MY_RESOURCE_ID_DX' defined on 'MY_RESOURCE'.
SQL State: 23505
Error Code: 20000


MyResource myResource = (MyResource) IMyResource.ITEM_TYPE.createItem();
myResource.setContent(content);
myResource.setName(name);
myResource.setCreator(getAuthenticatedContributor());
myResource.setCreationDate(new Timestamp(System.currentTimeMillis()));
myResource.setDescription(partFileName);
myResource.setContextId(IContext.PUBLIC);
myResource.setItemId(UUID.generate());
myResource.setProjectArea(projectAreaHandle);
IRepositoryItemService repositoryItemService = getService(IRepositoryItemService.class);
myResource = repositoryItemService.saveItem(myResource);


Which primary key it is referring too? Each object seem to have their own UUID.
Thanks for your help.

5 answers



permanent link
m sawires (1462268) | answered Jan 19 '10, 9:06 a.m.
Perfect, that fixed it. Thanks a lot for your help.

I tried saving the resource within the scope of a Project area but I
still get the error with the duplicate key:
Here is the error I'm getting. I'll appreciate any pointers as I don't
understand what is happening.

com.ibm.team.repository.common.InternalRepositoryException:
CRJAZ0447I SQL statement execution failed.Integrity constraint
violation
SQL: INSERT INTO myRESOURCE.myRESOURCE (STATE_ID, ITEM_ID,
CONTEXT_ID, MODIFIED, MODIFIED_BY_ITEM_ID, ID, NAME,
CONTENT_INTERNAL_ID, CONTENT_CONTENT_LENGTH, CONTENT_CONTENT_TYPE,
CONTENT_CHECKSUM, CREATION_DATE, CREATOR_ITEM_ID,
PROJECT_AREA_ITEM_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
...
predecessor: null) (id: -1, name: test.pdf,
description: test.pdf, creationDate: 2010-01-18
22:06:44.222)

It looks like you have an 'ID' field defined in your model, but you
don't set it in in your code, so it will always be '-1'. The ID very
likely has a uniqueness constraint, so no two items with the same ID can
be saved.

You must either set the ID to a new value for each item, or remove it
from the model if you don't need it.

--
Regards,
Patrick
Jazz Work Item Team

permanent link
Patrick Streule (4.9k21) | answered Jan 19 '10, 5:08 a.m.
JAZZ DEVELOPER
I tried saving the resource within the scope of a Project area but I
still get the error with the duplicate key:
Here is the error I'm getting. I'll appreciate any pointers as I don't
understand what is happening.

com.ibm.team.repository.common.InternalRepositoryException:
CRJAZ0447I SQL statement execution failed.Integrity constraint
violation
SQL: INSERT INTO myRESOURCE.myRESOURCE (STATE_ID, ITEM_ID,
CONTEXT_ID, MODIFIED, MODIFIED_BY_ITEM_ID, ID, NAME,
CONTENT_INTERNAL_ID, CONTENT_CONTENT_LENGTH, CONTENT_CONTENT_TYPE,
CONTENT_CHECKSUM, CREATION_DATE, CREATOR_ITEM_ID,
PROJECT_AREA_ITEM_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
...
predecessor: null) (id: -1, name: test.pdf,
description: test.pdf, creationDate: 2010-01-18
22:06:44.222)

It looks like you have an 'ID' field defined in your model, but you
don't set it in in your code, so it will always be '-1'. The ID very
likely has a uniqueness constraint, so no two items with the same ID can
be saved.

You must either set the ID to a new value for each item, or remove it
from the model if you don't need it.

--
Regards,
Patrick
Jazz Work Item Team

permanent link
m sawires (1462268) | answered Jan 18 '10, 10:12 p.m.
I tried saving the resource within the scope of a Project area but I still get the error with the duplicate key:
Here is the error I'm getting. I'll appreciate any pointers as I don't understand what is happening.

com.ibm.team.repository.common.InternalRepositoryException: CRJAZ0447I SQL statement execution failed.Integrity constraint violation
SQL: INSERT INTO myRESOURCE.myRESOURCE (STATE_ID, ITEM_ID, CONTEXT_ID, MODIFIED, MODIFIED_BY_ITEM_ID, ID, NAME, CONTENT_INTERNAL_ID, CONTENT_CONTENT_LENGTH, CONTENT_CONTENT_TYPE, CONTENT_CHECKSUM, CREATION_DATE, CREATOR_ITEM_ID, PROJECT_AREA_ITEM_ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
SQL Exception #1
duplicate key value in a unique or primary key constraint or unique index identified by 'my_RESOURCE_ID_DX' defined on 'my_RESOURCE'.
SQL State: 23505
Error Code: 20000
Class: com.ibm.team.repository.service.internal.dataaccess.write2.Row
Item Handle: com.sample.common.MYResource.impl.MYResourceImpl@7d307d30 (stateId: [UUID _sKM2IQSnEd-cbaUCkiOXgg], itemId: [UUID _q1HSgASnEd-cbaUCkiOXgg], origin: <unset>, immutable: true) (contextId: [UUID _kbnuYAQ6Ed-usKbkLIXudA], modified: 2010-01-18 22:06:51.394, workingCopy: <unset>) (mergePredecessor: null, workingCopyPredecessor: <unset>, workingCopyMergePredecessor: <unset>, predecessor: null) (id: -1, name: test.pdf, description: test.pdf, creationDate: 2010-01-18 22:06:44.222)

permanent link
m sawires (1462268) | answered Jan 18 '10, 4:50 p.m.
That didn't fix it.
I'm wondering does a resource saved to a Jazz repository need to be within the scope of a Project Area? In my case it isn't maybe that's why I'm having this duplicate error because I was able to save one resource only, after that I'm getting the duplicate error...
Thanks

permanent link
Jared Burns (4.5k29) | answered Jan 18 '10, 8:52 a.m.
FORUM ADMINISTRATOR / FORUM MODERATOR / JAZZ DEVELOPER
On Sat, 16 Jan 2010 03:22:55 +0000, marly wrote:
MyResource myResource = (MyResource)
IMyResource.ITEM_TYPE.createItem();
myResource.setContent(content);
myResource.setName(name);
myResource.setCreator(getAuthenticatedContributor());
myResource.setCreationDate(new
Timestamp(System.currentTimeMillis()));
myResource.setDescription(partFileName);
myResource.setContextId(IContext.PUBLIC);
myResource.setItemId(UUID.generate());
myResource.setProjectArea(projectAreaHandle); IRepositoryItemService
repositoryItemService = getService(IRepositoryItemService.class);
myResource =
repositoryItemService.saveItem(myResource);

You don't need to set the item id when you create an item. It will be
automatically created by the platform. You should delete the line that
reads "myResource.setItemId(UUID.generate());"

--
Jared Burns
Jazz Process Team

Your answer


Register or to post your answer.


Dashboards and work items are no longer publicly available, so some links may be invalid. We now provide similar information through other means. Learn more here.