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

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: https://issues.apache.org/jira/browse/OPENJPA-456
>             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.

Reply via email to