Uploaded image for project: 'Cayenne'
  1. Cayenne
  2. CAY-1795

"Invisible" ObjAttribute in subclass

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.1B1, 3.2.M1
    • 4.0.M2
    • Modeler
    • None

    Description

      This is a two-fold issue with "invisible" attributes that are possible to map via the Modeler, and that are causing runtime problems.. Scenario to reproduce:

      • Open the modeler
      • Create new DataMap
      • Create new DbEntity with a PK column
      • Create new ObjEntity based on DbEntity above and map meaningful PK
      • Create another ObjEntity that is a subclass of the ObjEntity above
      • Add ObjAttribute to subclass and use the same name as the meaningful PK attribute. Hit "Enter" in the name field - attribute disappears. The user assumes this was because the attribute is already defined in the superclass..
      • Save the project - subclass ObjAttribute appears in the XML:

      <data-map xmlns="http://cayenne.apache.org/schema/3.0/modelMap"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://cayenne.apache.org/schema/3.0/modelMap http://cayenne.apache.org/schema/3.0/modelMap.xsd"
      project-version="6">
      <db-entity name="db_entity">
      <db-attribute name="untitledAttr" type="INTEGER" isPrimaryKey="true" isMandatory="true"/>
      </db-entity>
      <obj-entity name="DbEntity" dbEntityName="db_entity">
      <obj-attribute name="untitledAttr" type="java.lang.Integer" db-attribute-path="untitledAttr"/>
      </obj-entity>
      <obj-entity name="ObjEntity" superEntityName="DbEntity">
      <obj-attribute name="untitledAttr"/>
      </obj-entity>
      </data-map>

      I.e. subclass attribute is there, but it is invisible in the Modeler.

      Now problem number two is caused by invisible attribute in runtime. A SelectQuery against super that fetches some sub entities , returns NULL elements in the result list.

      Fix ideas...

      As a minor improvement we may kill such "shadow" attribute in runtime and print a warning, but I guess the real fix should be on the Modeler end - complain about a name that matches super name. And if the super was renamed to create sub conflict, display a validation error on save. And do not hide the attribute if it was added - the user should be able to see it and remove/rename if needed.

      Attachments

        1. v7upgradeTest.patch
          10 kB
          Oleg Artyukevich
        2. v7upgrade.patch
          4 kB
          Oleg Artyukevich
        3. v7upgrade_2.patch
          4 kB
          Oleg Artyukevich
        4. ModelerObjAttribute.patch
          36 kB
          Oleg Artyukevich
        5. ModelerObjAttribute_4.patch
          45 kB
          Oleg Artyukevich
        6. ModelerObjAttribute_3.patch
          37 kB
          Oleg Artyukevich
        7. ModelerObjAttribute_2.patch
          46 kB
          Oleg Artyukevich
        8. ModelerObjAttribute_2_simplified.patch
          37 kB
          Dzmitry Kazimirchyk
        9. cay1795.patch
          2 kB
          Oleg Artyukevich

        Activity

          People

            andrus Andrus Adamchik
            andrus Andrus Adamchik
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: