Uploaded image for project: 'OpenJPA'
  1. OpenJPA
  2. OPENJPA-414

Null id's in entyties while using Joined inheritance strategy

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Blocker
    • Resolution: Unresolved
    • 1.0.0
    • None
    • None
    • None

    Description

      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)

      Attachments

        Activity

          People

            Unassigned Unassigned
            afilipchik Alexander Filipchik
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: