[hibernate-issues] [Hibernate-JIRA] Closed: (HHH-3342) one to many association with a subclass of a class having discriminator column creates wrong sql

Gail Badner (JIRA) noreply at atlassian.com
Wed Jun 11 15:24:39 EDT 2008


     [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-3342?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gail Badner closed HHH-3342.
----------------------------


> one to many association with a subclass of a class having discriminator column creates wrong sql
> ------------------------------------------------------------------------------------------------
>
>                 Key: HHH-3342
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3342
>             Project: Hibernate3
>          Issue Type: Bug
>          Components: query-hql
>    Affects Versions: 3.0.5, 3.1.3, 3.2.6
>         Environment: Tested on Hibernate Version 3.0.5, 3.1.1 & 3.2.6.ga. CGLIB-2.1.3
>            Reporter: Abhijit
>            Assignee: Gail Badner
>
> I have one abstract class which has two sub classes and each each sub class has further subclasses. The second level subclasses doesn't have tables and only has discriminator value. As below:
> <hibernate-mapping
> >
>     <class
>         name="edu.wustl.catissuecore.domain.AbstractSpecimen"
>         table="CATISSUE_ABSTRACT_SPECIMEN"
> 		lazy="true"
>     >
>         <id
>             name="id"
>             column="IDENTIFIER"
>             type="long"
>             length="30"
>             unsaved-value="null"
>         >
>             <generator class="native">
>                 <param name="sequence">CATISSUE_ABSTRACT_SPECIMEN_SEQ</param>
>             </generator>
>         </id>
>        <discriminator column="SPECIMEN_CLASS" type="string"/>
>       <subclass name="edu.wustl.catissuecore.domain.Specimen" discriminator-value="Specimen">
>        <join table="CATISSUE_SPECIMEN">
> 			<key column="IDENTIFIER"/>
> 			
> 			<property
> 	            name="positionDimensionOne"
> 	            type="int"
> 	            update="true"
> 	          />
>               ......
>        </join>
>          
>                 <subclass
>                              name="edu.wustl.catissuecore.domain.FluidSpecimen"
>                                  discriminator-value="Fluid" lazy="true"
>                  >
>                  </subclass>
>          
>                   <subclass   name="edu.wustl.catissuecore.domain.CellSpecimen"
>                                 discriminator-value="Cell" lazy="true"
>                   >
>                   </subclass>
>           </subclass>      
>       <subclass name="edu.wustl.catissuecore.domain.RequirementSpecimen" discriminator-value="ReqSpecimen">
>        <join table="CATISSUE_CP_REQ_SPECIMEN">
> 			<key column="IDENTIFIER"/>
> 			
> 			<property
> 	            name="storageType"
> 	            type="int"
> 	            update="true"
> 	          />
>               ......
>        </join>
>          
>                 <subclass
>                              name="edu.wustl.catissuecore.domain.FluidSpecimen"
>                                  discriminator-value="Fluid" lazy="true"
>                  >
>                  </subclass>
>          
>                   <subclass   name="edu.wustl.catissuecore.domain.CellSpecimen"
>                                 discriminator-value="Cell" lazy="true"
>                   >
>                   </subclass>
>           </subclass>      
>      </class>
> </hibernate-mapping>
> --------------------------------------
> <hibernate-mapping
> >
>     <class
>         name="edu.wustl.catissuecore.domain.AbstractSpecimenCollectionGroup"
>         table="CATISSUE_ABS_SPECI_COLL_GROUP"
> 		lazy="true"
>     >
>         <id
>             name="id"
>             column="IDENTIFIER"
>             type="long"
>             length="30"
>             unsaved-value="null"
>         >
>             <generator class="native">
>                 <param name="sequence">CATISSUE_SPECIMEN_COLL_GRP_SEQ</param>
>             </generator>
>         </id>
>  		<property
> 	            name="name"
> 	            type="string"
> 	            update="true"
> 	            insert="true"
> 	            column="NAME"
> 	            length="255"
> 	    />
>         <property
>             name="clinicalDiagnosis"
>             type="string"
>             update="true"
>             insert="true"
>             column="CLINICAL_DIAGNOSIS"
>             length="150"
>         />
>            .....
>           .......
> 	<joined-subclass
> 	        name="edu.wustl.catissuecore.domain.CollectionProtocolEvent"
> 	        table="CATISSUE_COLL_PROT_EVENT" lazy="false"
> 	    >
>            <key
>                 column="IDENTIFIER"
>             />
>          
>          <property
>             name="collectionPointLabel"
>             type="string"
>             update="true"
>             insert="true"
>             column="COLLECTION_POINT_LABEL"
>             length="255"
>         />
>         
>         
>          <set
> 	            name="requirementSpecimenCollection"
> 	            table="CATISSUE_CP_REQ_SPECIMEN"
> 	            lazy="true"
> 	            inverse="true"
> 	            cascade="save-update"
> 	            fetch="subselect"
> 	            sort="unsorted"
> 	        >
> 	              <key
> 	                  column="COLLECTION_PROTOCOL_EVENT_ID"
> 	              />
> 	              <one-to-many
> 	                  class="edu.wustl.catissuecore.domain.RequirementSpecimen"
> 	              />
> 	    </set>
>            .....
>        </joined-subclass>
>     </class>
>   </hibernate-mapping>
> --------------------------------------
> In above configuration 'CollectionProtocolEvent' which is a joined -subclass of 'AbstractSpecimenCollectionGroup' has one to many association with RequirementSpecimen which is subclass of AbstractSpecimen.
> It was found that whenever we execute following code:
> line 1: CollectionProtocolEvent cpe =(CollectionProtocolEvent)  session.get(CollectionProtocolEvent.class,new Long(101));
> line2: cpe.getRequirementSpecimenCollection ();
> At line 2 hibernate generates wrong query. In select column it generates
> 'AbstractSpecimen.COLLECTION_PROTOCOL_EVENT_ID,...from'  but it should be 'RequirementSpecimen .COLLECTION_PROTOCOL_EVENT_ID,...from..'  
> Hence it gives error "unknown column" It has been observed that inner join part of the query gets generated properly. But in select part it always takes parent table's alias.
> In case we use joined-class instead of subclass without driminator everything works fine.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the hibernate-issues mailing list