cayenne-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dzmitry Kazimirchyk (JIRA)" <>
Subject [jira] [Updated] (CAY-1795) "Invisible" ObjAttribute in subclass
Date Mon, 11 Nov 2013 21:15:18 GMT


Dzmitry Kazimirchyk updated CAY-1795:

    Attachment: ModelerObjAttribute_2_simplified.patch

Hi Oleg. Thanks for the patch. Looks like we're almost there. Please see modified version
of your patch attached where I've refactored validation logic to make it more simple and easier
to extend in the future. If you can't see any issues with these changes I think we may be
ready to apply this to trunk.

> "Invisible" ObjAttribute in subclass
> ------------------------------------
>                 Key: CAY-1795
>                 URL:
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Modeler
>    Affects Versions: 3.1B1, 3.2M1
>            Reporter: Andrus Adamchik
>             Fix For: 3.2M2
>         Attachments: ModelerObjAttribute.patch, ModelerObjAttribute_2.patch, ModelerObjAttribute_2_simplified.patch,
cay1795.patch, v7upgrade.patch, v7upgradeTest.patch, v7upgrade_2.patch
> 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=""
> 	 xmlns:xsi=""
> 	 xsi:schemaLocation=""
> 	 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.

This message was sent by Atlassian JIRA

View raw message