openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Teresa Kan (JIRA)" <>
Subject [jira] Updated: (OPENJPA-456) Missed to validate the column name length for Join Column
Date Fri, 07 Dec 2007 19:03:43 GMT


Teresa Kan updated OPENJPA-456:

    Attachment: openjpa_456_2.patch

With my current fix(OPENJPA-456) which  put the getValidColumnName() in the PersistenctMappingDefault..populateJoinColumn().
The output will be like this:

===PersitendceMappingDefault.populateJoinColumn(), name before conversion=RelationToHandlerMapInstance_id
===PersitendceMappingDefault.populateJoinColumn(), name after conversion=RELATIONTOHANDLERMAPINSTANCE_I

If I modified the code to shorten the name first before append the targetName ("_ID"), then
the output looks like this:

===PersitendceMappingDefault.populateJoinColumn(), tempname =RelationToHandlerMapInstanc
===PersitendceMappingDefault.populateJoinColumn(), name before conversion=RelationToHandlerMapInstanc_id
===PersitendceMappingDefault.populateJoinColumn(), name after conversion=RELATIONTOHANDLERMAPINSTANC_ID

I think the latest solution is better. It preserves the _ID at the end. For current solution
will lost the _ID at the end if the max column name is much shorter than the initial name.
The attach patch provides the latest solution..

> Missed to validate the column name length for Join Column
> ---------------------------------------------------------
>                 Key: OPENJPA-456
>                 URL:
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jdbc
>    Affects Versions: 1.1.0
>            Reporter: Teresa Kan
>             Fix For: 1.1.0
>         Attachments: OPENJPA-456.patch, openjpa_456_2.patch
> In the PersistenceMappingDefault.populateJoinColumn() method, it missed the call to validate
the column length. Consequencely the column length  that was longer than DB2's max column
length resulted an invalid column length exception .
> The fix wil be:
>     public void populateJoinColumn(FieldMapping fm, Table local, Table foreign,
>         Column col, Object target, int pos, int cols) {
>         // only use spec defaults with column targets
>         if (!(target instanceof Column))
>             return;
>         // if this is a bidi relation, prefix with inverse field name, else
>         // prefix with owning entity name
>         FieldMapping[] inverses = fm.getInverseMappings();
>         String name;
>         if (inverses.length > 0)
>             name = inverses[0].getName();
>         else
>             name = fm.getDefiningMapping().getTypeAlias();
>         // suffix with '_' + target column
>         name += "_" + ((Column) target).getName();
>         name = dict.getValidColumnName(name, foreign);  ===> add this call before
set the name to the column.
>         col.setName(name);
>     }

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

View raw message