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.2.6, 3.1.3, 3.0.5
Environment: Tested on Hibernate Version 3.0.5, 3.1.1 & 3.2.6.ga.
CGLIB-2.1.3
Reporter: Abhijit
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....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira