Null id's in entyties while using Joined inheritance strategy
-------------------------------------------------------------

                 Key: OPENJPA-414
                 URL: https://issues.apache.org/jira/browse/OPENJPA-414
             Project: OpenJPA
          Issue Type: Bug
    Affects Versions: 1.0.0
            Reporter: Alexander Filipchik
            Priority: Blocker


I use inheritance in that way:
Parent class:
public class State implements Serializable {

        private static final long serialVersionUID = -380133999593231293L;

        private long stateId;   
        
        public State() {                
        }
        
        public long getStateId() {
                return stateId;
        }

        public void setStateId(long stateId) {
                this.stateId = stateId;
        }
        
        @Override
        public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;

        State that = (State) obj;      
        if (stateId!=that.stateId) return false;

        return true;
        }

        @Override
        public int hashCode() {
        int result;
        result = 31 * result + (int) (stateId ^ (stateId >>> 32));
        }       
}
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"; 
version="1.0">
        <package>xxx</package>  
        <entity class="State" name="State">
                <table name="REG_STATUS" />
                <inheritance strategy="JOINED"/>                
                <attributes>
                        <id name="stateId">
                                <column name="STATUS_ID"/> 
                        </id>
                </attributes>
        </entity>

it has 1 child class:
public class RCategory extends State implements Serializable {

    private static final long serialVersionUID = 2472570459234097349L;

    private RCategory parentCategory;

    private String title;

    private String description;

    private Set<RCategory> children;

    private boolean containsChildren;

    private Long id;

    public RCategory() {
    }

    public RCategory(Long id, String title) {
        setId(id);
        this.title = title;
        this.containsChildren = false;
    }

    public RCategory(Long id, String title, boolean containsChildren) {
        setId(id);
        this.title = title;
        this.containsChildren = containsChildren;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getTitle() {
        return this.title;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        System.out.println("---------------------Setting 
id-------------------");
        System.out.println(id);
        this.id = id;
    }


    public void setTitle(String title) {
        this.title = title;
    }

    public Set<RCategory> getChildren() {
        return children;
    }

    public void setChildren(Set<RCategory> children) {
        this.children = children;
    }

    public RCategory getParentCategory() {
        return parentCategory;
    }

    public void setParentCategory(RCategory parentCategory) {
        this.parentCategory = parentCategory;
    }

    public boolean isContainsChildren() {
        return containsChildren;
    }

    public void setContainsChildren(boolean containsChildren) {
        this.containsChildren = containsChildren;
    }

    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;

        RCategory rCategory = (RCategory) o;

        if (id != null ? !id.equals(rCategory.id) : rCategory.id != null) 
return false;
        if (title != null ? !title.equals(rCategory.title) : rCategory.title != 
null) return false;

        return true;
    }

    public int hashCode() {
        int result = super.hashCode();
        result = 31 * result + (title != null ? title.hashCode() : 0);
        result = 31 * result + (id != null ? id.hashCode() : 0);
        return result;
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm";
                 version="1.0">
    <package>xxx</package>

    <entity class="RCategory" name="RCategory">
        <table name="reg_r_category"/>
        <primary-key-join-column name="R_CATEGORY_ID" 
referenced-column-name="STATUS_ID"/>
        <post-load method-name="prinf"/>
        <attributes>
            <id name="id">
                <column name="R_CATEGORY_ID"/>
            </id>
            <basic name="title">
                <column length="256" name="TITLE" nullable="false"/>
            </basic>

            <basic name="description">
                <column length="512" name="DESCRIPTION" nullable="false"/>
            </basic>

            <basic name="containsChildren">
                <column name="CONTAIN_SUBCATEGORIES"/>
            </basic>

            <many-to-one name="parentCategory" target-entity="RCategory">
                <join-column name="PARENT_CATEGORY_ID" insertable="true" 
updatable="true"/>
                <cascade>
                    <cascade-merge/>
                    <cascade-refresh/>
                </cascade>
            </many-to-one>

            <one-to-many mapped-by="parentCategory" name="children" 
target-entity="RCategory">
                <order-by>title</order-by>
                <cascade>
                    <cascade-all/>
                </cascade>
            </one-to-many>
        </attributes>
    </entity>


When i use getReference on RCategory - i get object with NULL!!!! id. 
Also, when i use find, i get object with null id too, but i can use it in 
references (add to another object and persist)

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