You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Maria Jurcovicova (Created) (JIRA)" <ji...@apache.org> on 2012/02/10 13:52:59 UTC

[jira] [Created] (OPENJPA-2125) Default join table name does not follow JPA v2 specification

Default join table name does not follow JPA v2 specification
------------------------------------------------------------

                 Key: OPENJPA-2125
                 URL: https://issues.apache.org/jira/browse/OPENJPA-2125
             Project: OpenJPA
          Issue Type: Bug
          Components: jdbc, jpa
    Affects Versions: 2.1.1
            Reporter: Maria Jurcovicova


According to JPA v2 specification, two types of relationship use join table to keep relational data: 
* many-to-many described in page 48,
* unidirectional one-to-many described in page 50.

In both cases, the joining table name should be composed from entity names (e.g. class names) by default. OpenJPA uses entity table names by default.

Quote from JPA v2 specification:
"Entity A is mapped to a table named A. 
Entity B is mapped to a table named B. 

There is a join table that is named A_B (owner name first). The join table has ..."


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 join table name: MtmOwner_MtmInverse
OpenJPA join table name:  tblMtmOwner_MtmInverse


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

        

[jira] [Commented] (OPENJPA-2125) Default join table name does not follow JPA v2 specification

Posted by "Kevin Sutter (Commented) (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/OPENJPA-2125?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13213665#comment-13213665 ] 

Kevin Sutter commented on OPENJPA-2125:
---------------------------------------

I think you answered your own question.  If you look at the specification excerpt you quoted, it says that "Entity A is mapped to *table* named A.  Entity B is mapped to a *table* named B."  So, the join table name is the concatenation of those two table names (A_B).  If the Entity has an @Table annotation, then that Entity would be mapped to the *table* identified by that @Table annotation.  So, I believe this is working as designed.
                
> Default join table name does not follow JPA v2 specification
> ------------------------------------------------------------
>
>                 Key: OPENJPA-2125
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2125
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jdbc, jpa
>    Affects Versions: 2.1.1
>            Reporter: Maria Jurcovicova
>
> According to JPA v2 specification, two types of relationship use join table to keep relational data: 
> * many-to-many described in page 48,
> * unidirectional one-to-many described in page 50.
> In both cases, the joining table name should be composed from entity names (e.g. class names) by default. OpenJPA uses entity table names by default.
> Quote from JPA v2 specification:
> "Entity A is mapped to a table named A. 
> Entity B is mapped to a table named B. 
> There is a join table that is named A_B (owner name first). The join table has ..."
> 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 join table name: MtmOwner_MtmInverse
> OpenJPA join table name:  tblMtmOwner_MtmInverse

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

        

[jira] [Resolved] (OPENJPA-2125) Default join table name does not follow JPA v2 specification

Posted by "Maria Jurcovicova (Resolved) (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/OPENJPA-2125?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Maria Jurcovicova resolved OPENJPA-2125.
----------------------------------------

    Resolution: Invalid

Ah OK, it is true that it can be read that way. Thank you for the answer.

I'm resolving the issue as 'invalid'.


                
> Default join table name does not follow JPA v2 specification
> ------------------------------------------------------------
>
>                 Key: OPENJPA-2125
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2125
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jdbc, jpa
>    Affects Versions: 2.1.1
>            Reporter: Maria Jurcovicova
>
> According to JPA v2 specification, two types of relationship use join table to keep relational data: 
> * many-to-many described in page 48,
> * unidirectional one-to-many described in page 50.
> In both cases, the joining table name should be composed from entity names (e.g. class names) by default. OpenJPA uses entity table names by default.
> Quote from JPA v2 specification:
> "Entity A is mapped to a table named A. 
> Entity B is mapped to a table named B. 
> There is a join table that is named A_B (owner name first). The join table has ..."
> 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 join table name: MtmOwner_MtmInverse
> OpenJPA join table name:  tblMtmOwner_MtmInverse

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