[
https://issues.apache.org/jira/browse/OPENJPA-2126?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13213724#comment-13213724
]
Kevin Sutter commented on OPENJPA-2126:
---------------------------------------
My guess is that the introduction of the Map type and @MapKey annotation is
confusing this name resolution. If you change the type of owners to a standard
Collection, I bet the name generation is correct. Looking through the spec,
it's not clear on the naming expectations when using a Map. The only reference
is this sentence in section 2.7.2:
"When the value type of the map is an entity, a join table is used to map the
map for a many-to-many
relationship.."
But, I can't find any naming generation rules when the @ManyToMany is being
represented by a Map. I've also searched other references to find general
guidelines without any luck. Since you always have the ability to override the
defaults via the @JoinTable annotation, I'm not sure we would entertain changes
in this area. Unless we can determine a more definitive explanation of the
naming requirements.
Thanks, Kevin
> Default join table column name in many-to-many relationship does not follow
> JPA v2 specification
> ------------------------------------------------------------------------------------------------
>
> Key: OPENJPA-2126
> URL: https://issues.apache.org/jira/browse/OPENJPA-2126
> Project: OpenJPA
> Issue Type: Bug
> Components: jdbc, jpa
> Affects Versions: 2.1.1
> Reporter: Maria Jurcovicova
>
> According to JPA v2 specification page 48, the joining table should have two
> columns. One column should have foreign key to owners table and the other
> should have foreign key to the inverse table.
> The name of the column referencing the owner should be:
> * the name of the relationship property or field of inverse entity ;
> * underscore "_";
> * the name of the primary key column in owner table.
> OpenJPA assumes that the name of the column referencing the owner is:
> * owner entity name ;
> * underscore "_";
> * the name of the primary key column in owner table.
> The name of the column referencing the inverse is correct.
> Example entities:
> @Entity
> @Table(name="tblMtmOwner")
> public class MtmOwner {
> @Id
> private long id;
> private String name;
> @ManyToMany
> private Collection<MtmInverse> inverses = new ArrayList<MtmInverse>();
> }
>
> @Entity
> public class MtmInverse{
> @Id
> private long id;
> @ManyToMany(mappedBy="inverses")
> @MapKey(name="name")
> private Map<String, MtmOwner> owners = new HashMap<String, MtmOwner>();
> }
> Expected column name: owners_id
> OpenJPA column name: mtmowner_id
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira