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/13 09:18:59 UTC

[jira] [Created] (OPENJPA-2127) Join table in unidirectional one-to-many relationship with Map does not follow JPA v2 specification

Join table in unidirectional one-to-many relationship with Map does not follow JPA v2 specification
---------------------------------------------------------------------------------------------------

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


According to JPA v2 specification page 50, the joining table name should be composed from entity names (e.g. class names) by default. The table should have two columns.

Table name:
* owner class name
* underscore "_"
* inverse class name.

Name of the column with inverses ids:
* the name of the relationship property or field of the owner
* underscore "_"
* the name of the primary key column in table inverse.

If the annotated property maps data into the map, OpenJPA assumes different database structure.

OpenJPA table name:
* owner class name <- OK
* underscore "_" <- OK
* the name of the relationship property or field of the owner <- WRONG

OpenJPA column with inverses id name:
* "element_id" <- WRONG

Note: this happens only with map. The default table structure with collection is different.

--
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] [Updated] (OPENJPA-2127) Join table in unidirectional one-to-many relationship with Map does not follow JPA v2 specification

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

Maria Jurcovicova updated OPENJPA-2127:
---------------------------------------

    Description: 
According to JPA v2 specification page 50, the joining table name should be composed from entity names (e.g. class names) by default. The table should have two columns.

Table name:
* owner class name
* underscore "_"
* inverse class name.

Name of the column with inverses ids:
* the name of the relationship property or field of the owner
* underscore "_"
* the name of the primary key column in table inverse.

If the annotated property maps data into the map, OpenJPA assumes different database structure.

OpenJPA table name:
* owner class name <- OK
* underscore "_" <- OK
* the name of the relationship property or field of the owner <- WRONG

OpenJPA column with inverses id name:
* "element_id" <- WRONG

Name of the column with owners ids is correct.

Extract from the 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). This join table has two foreign key
columns. One foreign key column refers to table A and has the same type as the primary key of
table A. The name of this foreign key column is formed as the concatenation of the following:
the name of entity A; "_"; the name of the primary key column in table A. The other foreign
key column refers to table B and has the same type as the primary key of table B and there is a
unique key constraint on it. The name of this foreign key column is formed as the concatenation
of the following: the name of the relationship property or field of entity A; "_"; the name
of the primary key column in table B."

Example entities:
@Entity
public class MapOneToManyOwner {

  @Id
  private long id;

  @OneToMany
  @MapKey(name="mapKey")
  private Map<String, MapOneToManyInverse> inverses;
}

@Entity
public class MapOneToManyInverse {

  @Id
  private long id;
  private String mapKey;
}

Expected table name: MapOneToManyOwner_MapOneToManyInverse
OpenJPA table name: MapOneToManyOwner_inverses

Expected column name: inverses_id
OpenJPA column name: element_id

DB structure that works with JPA:
CREATE TABLE MapOneToManyOwner_inverses (
  MapOneToManyOwner_id INT NOT NULL, 
  element_id INT NOT NULL, 
  UNIQUE (element_id)
);

Note: this happens only if the annotated property is a map. If it is a collection, join table structure is different.


  was:
According to JPA v2 specification page 50, the joining table name should be composed from entity names (e.g. class names) by default. The table should have two columns.

Table name:
* owner class name
* underscore "_"
* inverse class name.

Name of the column with inverses ids:
* the name of the relationship property or field of the owner
* underscore "_"
* the name of the primary key column in table inverse.

If the annotated property maps data into the map, OpenJPA assumes different database structure.

OpenJPA table name:
* owner class name <- OK
* underscore "_" <- OK
* the name of the relationship property or field of the owner <- WRONG

OpenJPA column with inverses id name:
* "element_id" <- WRONG

Note: this happens only with map. The default table structure with collection is different.

    
> Join table in unidirectional one-to-many relationship with Map does not follow JPA v2 specification
> ---------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-2127
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2127
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jdbc, jpa
>    Affects Versions: 2.1.1
>            Reporter: Maria Jurcovicova
>
> According to JPA v2 specification page 50, the joining table name should be composed from entity names (e.g. class names) by default. The table should have two columns.
> Table name:
> * owner class name
> * underscore "_"
> * inverse class name.
> Name of the column with inverses ids:
> * the name of the relationship property or field of the owner
> * underscore "_"
> * the name of the primary key column in table inverse.
> If the annotated property maps data into the map, OpenJPA assumes different database structure.
> OpenJPA table name:
> * owner class name <- OK
> * underscore "_" <- OK
> * the name of the relationship property or field of the owner <- WRONG
> OpenJPA column with inverses id name:
> * "element_id" <- WRONG
> Name of the column with owners ids is correct.
> Extract from the 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). This join table has two foreign key
> columns. One foreign key column refers to table A and has the same type as the primary key of
> table A. The name of this foreign key column is formed as the concatenation of the following:
> the name of entity A; "_"; the name of the primary key column in table A. The other foreign
> key column refers to table B and has the same type as the primary key of table B and there is a
> unique key constraint on it. The name of this foreign key column is formed as the concatenation
> of the following: the name of the relationship property or field of entity A; "_"; the name
> of the primary key column in table B."
> Example entities:
> @Entity
> public class MapOneToManyOwner {
>   @Id
>   private long id;
>   @OneToMany
>   @MapKey(name="mapKey")
>   private Map<String, MapOneToManyInverse> inverses;
> }
> @Entity
> public class MapOneToManyInverse {
>   @Id
>   private long id;
>   private String mapKey;
> }
> Expected table name: MapOneToManyOwner_MapOneToManyInverse
> OpenJPA table name: MapOneToManyOwner_inverses
> Expected column name: inverses_id
> OpenJPA column name: element_id
> DB structure that works with JPA:
> CREATE TABLE MapOneToManyOwner_inverses (
>   MapOneToManyOwner_id INT NOT NULL, 
>   element_id INT NOT NULL, 
>   UNIQUE (element_id)
> );
> Note: this happens only if the annotated property is a map. If it is a collection, join table structure is different.

--
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-2127) Join table in unidirectional one-to-many relationship with Map does not follow JPA v2 specification

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

Kevin Sutter resolved OPENJPA-2127.
-----------------------------------

    Resolution: Duplicate

This looks to be a duplicate of OPENJPA-2126.  The same explanations (and expectations) apply.  The bonus with this JIRA is that it looks like it has already been verified that without the use of the Map and @MapKey, everything works as expected.
                
> Join table in unidirectional one-to-many relationship with Map does not follow JPA v2 specification
> ---------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-2127
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2127
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jdbc, jpa
>    Affects Versions: 2.1.1
>            Reporter: Maria Jurcovicova
>
> According to JPA v2 specification page 50, the joining table name should be composed from entity names (e.g. class names) by default. The table should have two columns.
> Table name:
> * owner class name
> * underscore "_"
> * inverse class name.
> Name of the column with inverses ids:
> * the name of the relationship property or field of the owner
> * underscore "_"
> * the name of the primary key column in table inverse.
> If the annotated property maps data into the map, OpenJPA assumes different database structure.
> OpenJPA table name:
> * owner class name <- OK
> * underscore "_" <- OK
> * the name of the relationship property or field of the owner <- WRONG
> OpenJPA column with inverses id name:
> * "element_id" <- WRONG
> Name of the column with owners ids is correct.
> Extract from the 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). This join table has two foreign key
> columns. One foreign key column refers to table A and has the same type as the primary key of
> table A. The name of this foreign key column is formed as the concatenation of the following:
> the name of entity A; "_"; the name of the primary key column in table A. The other foreign
> key column refers to table B and has the same type as the primary key of table B and there is a
> unique key constraint on it. The name of this foreign key column is formed as the concatenation
> of the following: the name of the relationship property or field of entity A; "_"; the name
> of the primary key column in table B."
> Example entities:
> @Entity
> public class MapOneToManyOwner {
>   @Id
>   private long id;
>   @OneToMany
>   @MapKey(name="mapKey")
>   private Map<String, MapOneToManyInverse> inverses;
> }
> @Entity
> public class MapOneToManyInverse {
>   @Id
>   private long id;
>   private String mapKey;
> }
> Expected table name: MapOneToManyOwner_MapOneToManyInverse
> OpenJPA table name: MapOneToManyOwner_inverses
> Expected column name: inverses_id
> OpenJPA column name: element_id
> DB structure that works with JPA:
> CREATE TABLE MapOneToManyOwner_inverses (
>   MapOneToManyOwner_id INT NOT NULL, 
>   element_id INT NOT NULL, 
>   UNIQUE (element_id)
> );
> Note: this happens only if the annotated property is a map. If it is a collection, join table structure is different.

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