You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Ryosuke Iwata (JIRA)" <ji...@apache.org> on 2007/11/04 11:35:51 UTC

[jira] Updated: (OPENJPA-427) PostgresDictionary should set "63" as "maxAutoAssignNameLength".

     [ https://issues.apache.org/jira/browse/OPENJPA-427?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ryosuke Iwata updated OPENJPA-427:
----------------------------------

    Attachment: mychanges.patch

I created and attached below a patch to clarify what I'm thinking is to be done to fix this issue : it's simply add "maxAutoAssignNameLength = 63;" to the codes in the constructor of PostgresDictionary.

I've not tested the patch, because currently I don't have any environment to build OpenJPA.
I expect that my fix will work, because, according to the source comment,  PostgresDictionary uses getGeneratedKeySequenceName() which depends on the value of "maxAutoAssignNameLength" to obtain last generated key value.

And, I'm not sure if the value "63" is suitable for "maxAutoAssignNameLength".

I hope someone would fix if there's something wrong in my patch... m(_ _)m

Thank you.


> PostgresDictionary should set "63" as "maxAutoAssignNameLength".
> ----------------------------------------------------------------
>
>                 Key: OPENJPA-427
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-427
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: sql
>    Affects Versions: 1.0.0, 1.1.0
>         Environment: PostgreSQL 8.1.
>            Reporter: Ryosuke Iwata
>            Priority: Blocker
>         Attachments: mychanges.patch
>
>
> PostgresDictionary should set "63" (or something correct) as "maxAutoAssignNameLength", in order to let DBDictionary#getGeneratedKeySequenceName() generate correct names for IDENTITY sequences.
> OpenJPA trims IDENTITY sequence names longer than 32 characters, while PostgreSQL uses longer names for BIGSERIAL sequences. So, persisting entities with @Id column with GenerationType.IDENTITY often results in a database error such as :
>         org.apache.openjpa.lib.jdbc.ReportingSQLException: ERROR: relation "x_school_membershi_entityid_seq" does not exist {prepstmnt 2398193 SELECT CURRVAL(X_SCHOOL_TRANSFER_entityId_SEQ')} [code=0, state=42P01]
> The followings are the examples. "OK"s are the sequence names which PostgreSQL uses. "NG"s are those which OpenJPA attempts to use.
> Ex.1 -
>         Table : X_SCHOOL_TRANSFER_EVENT
>         BIGSERIAL Column : ENTITYID
>    OK : X_SCHOOL_TRANSFER_EVENT_ENTITY_ID_SEQ
>    NG : 'X_SCHOOL_TRANSFER__ENTITYID_SEQ
> Ex.2 -
>         Table : X_SCHOOL_MEMBERSHIP
>         BIGSERIAL Column : ENTITYID
>    OK : X_SCHOOL_MEMBERSHIP_ENTITYID_SEQ
>    NG : X_SCHOOL_MEMBERSHI_ENTITYID_SEQ

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.