[ 
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.

Reply via email to