From: Yu D. <yud...@gm...> - 2007-05-01 20:30:45
|
Query: 1. from invItem c where c.regularDoc is null; ---no rows return, should be a large number of rows 2. from invItem c where c.regularDoc is not null; --- returned the correct rows, cast (InvDecalItem) to get the rows. 3. from invItem c left join c.regularDoc doc where doc is null; --- returned rows, but I got cast exception (I cast the row to (InvDecalItem) as well as (InvItem) type) when I want to get row information. 4. from invItem c left join c.regularDoc doc where doc is not null; --- returned rows, the same as 3. I think of using join, I want to know that how to cast the result rows? below are related definations and classes: <hibernate-mapping> <class name="InvItem"> <id name="id" column="id"> <generator class="hilo"/> </id> <discriminator column="invType" length="1"/> <many-to-one name="transferredDetails"/> <!-- FK: Points to corresponding entry for transferred inventory items --> <subclass name="InvDecalItem" discriminator-value='D'> <one-to-one name="regularDoc" property-ref="decalNew" access="field" /> <!-- nullable: an item maybe not attach to a document --> </subclass> </class> </hibernate-mapping> </hibernate-mapping> <class name="AbstractRegularDoc" table="RegularDoc"> <id name="id"> <generator class="hilo"/> </id> <many-to-one name="decalNew" index="decalIdx" access="field" unique="true"/> </class> </hibernate-mapping> public abstract class AbstractRegularDoc{ private InvDecalItem decalNew; ... public InvDecalItem getDecalNew() { return decalNew; } public void setDecalNew(InvDecalItem decalNewParam) { if (decalNewParam != null) decalNewParam.setRegularDoc(this); } } public class InvDecalItem extends InvItem { private AbstractRegularDoc regularDoc; public AbstractRegularDoc getRegularDoc() { return regularDoc; } public void setRegularDoc(AbstractRegularDoc regulardocs) { if (this.regularDoc != null) this.regularDoc.setDecalNew(this); } } |