You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Jeremy Bauer (JIRA)" <ji...@apache.org> on 2008/11/26 19:44:44 UTC

[jira] Created: (OPENJPA-791) MappedSuperclass inheritance does not work properly with duplicate persistent field names

MappedSuperclass inheritance does not work properly with duplicate persistent field names
-----------------------------------------------------------------------------------------

                 Key: OPENJPA-791
                 URL: https://issues.apache.org/jira/browse/OPENJPA-791
             Project: OpenJPA
          Issue Type: Bug
          Components: jpa
    Affects Versions: 2.0.0
            Reporter: Jeremy Bauer


An inheritance hierarchy which uses MappedSuperclass does not behave as expected when duplicate persistent field names are in the hierarchy.  (No AttributeOverride is defined.)  The mapping tool creates a table which contains a single column of the duplicate name.  When an entity is persisted, only one field value is provided in the update and querying the entity results in one of the fields being null.

Code to reproduce the problem:

@Entity
public class SubCls extends MSuperCls {    
    @Id
    private int id;
    public void setId(int id) {
        this.id = id;
    }
    public int getId() {
        return id;
    }
}

@MappedSuperclass
public class MSuperCls extends M2SuperCls {
    @Basic
    private String name;
    public void setM1Name(String name) {
        this.name = name;
    }
    public String getM1Name() {
        return name;
    }      
}

@MappedSuperclass
public class M2SuperCls {
    @Basic
    private String name;
    public void setM2Name(String name) {
        this.name = name;
    }
    public String getM2Name() {
        return name;
    }  
}

        SubCls subcls = new SubCls();
        int id = new Random().nextInt();
        subcls.setId(id);
        subcls.setM1Name("M1Name");
        subcls.setM2Name("M2Name");
        em.getTransaction().begin();
        em.persist(subcls);
        em.getTransaction().commit();        
        em clear();       
        SubCls subcls2 = em.find(SubCls.class, id);
        System.out.println("id: " + subcls2.getId());
        System.out.println("m1: " + subcls2.getM1Name());
        System.out.println("m2: " + subcls2.getM2Name());
        
Results in:

id: -1632111518
m1: M1Name
m2: null

The JPA spec does not appear to prescribe a means for dealing with this condition, via issuing exception or a default naming scheme which handles duplicate persistence names.  The assumption appears to be that an AttributeOverride should be specified to handle this condition, but since AttributeOverride must be specified on the entity, it only works for a single instance override of a duplicate name.  Given the intent of AttributeOverride, it appears that the appropriate course of action is for OpenJPA to detect the duplicate names in the hierarchy and throw an appropriate exception.



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.