@Column in @AttributeOverride not honoring table attribute that maps to a 
secondary table in mappedsuperclass entity
--------------------------------------------------------------------------------------------------------------------

                 Key: OPENJPA-150
                 URL: https://issues.apache.org/jira/browse/OPENJPA-150
             Project: OpenJPA
          Issue Type: Bug
          Components: jdbc, sql
         Environment: Any
            Reporter: Albert Lee


I have the following scenario mapping entity to 2 tables:

- a mapped super class that has a field
- a subclass with a pk and a field.
- trying to map all the fields (except the pk (id) ) to a secondary table 
(SEC_TABLE2MSC)
  - use @Column in the sub-class to override (name) to the secondary table
  - use @AttributeOverride to override the field (street) in the mapped super 
class to the secondary table.

===============
@MappedSuperclass
public abstract class AnnMSCMultiTable
implements IMultiTableEntity
{
    // @Column(table="SEC_TABLE2MSC")
    private String street;
    public String getStreet() {
        return street;
    }
   public void setStreet(String street) {
        this.street = street;
    }
}
===============
@Entity
@SecondaryTable(name="SEC_TABLE2MSC", [EMAIL PROTECTED](name="id"))
@AttributeOverrides(
        {
            @AttributeOverride(name="street", [EMAIL PROTECTED](name="street", 
table="SEC_TABLE2MSC")),
        })
public class AnnMSCMultiTableEnt
extends AnnMSCMultiTable
{
    @Id
    private int id;

    @Column(name="name2", table="SEC_TABLE2MSC")
    private String name;
}
===============

>From examining JPA spec, there is no specific in the @Column and 
>@AttributeOverride that this should not be allow. So I believe this is a valid 
>scenario.

Using the MappingTool, the attribute override does not map the street field to 
the SEC_TABLE2MSC as I would expect:

CREATE TABLE AnnMSCMultiTableEnt (id INTEGER NOT NULL, street VARCHAR(254), 
PRIMARY KEY (id));
CREATE TABLE SEC_TABLE2MSC (id INTEGER, name2 VARCHAR(254));
CREATE INDEX I_SC_TMSC_ID ON SEC_TABLE2MSC (id);

I experiment this a little bit and the only way I can map the street field to 
SEC_TABLE2MSC is
to add the @Column against the "street" attribute in the super class. (the 
commented @Column in the example).
The expected SQL are:

CREATE TABLE AnnMSCMultiTableEnt (id INTEGER NOT NULL, PRIMARY KEY (id));
CREATE TABLE SEC_TABLE2MSC (id INTEGER, street VARCHAR(254), name2 
VARCHAR(254));
CREATE INDEX I_SC_TMSC_ID ON SEC_TABLE2MSC (id);

I tried to create the tables manually using the expected layout, but the 
runtime still using the incorrect tables structure. I would suspect the 
MappingTool and the runtime are using the same mapping strategy.

Albert Lee,

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