2014-01-16 57 views
1

我有以下类别:休眠单表继承自加入

指南类:

public abstract class Guide 
{ 
    private Long idGuide; 
    private String name; 

    private GuideContainer parent; 
    /** GETTERS & SETTERS*/ 
} 

GuideContainer:

public class GuideContainer extends Guide 
{  
    private Guide children; 
/** GETTER & SETTERS */ 
} 

GuideFile:

public class GuideFile extends Guide 
{ 
    private String uri; 
/**GETTERS & SETTERS */ 
} 

与映射如下: 对于指南:

<hibernate-mapping> 
    <class name="Guide" table="guides" abstract="true"> 
     <id name="idGuide" type="integer" column="idGuide"> 
      <generator class="assigned" /> 
     </id> 
     <property name="name" type="java.lang.String" column="name" /> 
     <discriminator column="type" type="java.lang.String" /> 

     <many-to-one class="GuideContainer" fetch="join" name="parent"> 
      <column name="parent" /> 
     </many-to-one> 
    </class> 
</hibernate-mapping> 

GuideFile:

<hibernate-mapping> 
    <subclass extends="Guide" name="GuideFile" discriminator-value="file"> 
     <property name="uri" type="java.lang.String" column="uri" /> 
    </subclass> 
</hibernate-mapping> 

GuideContainer:

<hibernate-mapping> 
    <subclass extends="Guide" name="GuideContainer" discriminator-value="container"> 
     <set fetch="select" inverse="true" lazy="true" name="children" sort="unsorted" table="children"> 
      <key> 
       <column name="parent" not-null="false" /> 
      </key> 
      <one-to-many class="Guide" /> 
     </set> 
    </subclass> 
</hibernate-mapping> 

当我试图让所有的导游与给定父

Query query = getSession().createQuery("from Guide g where parent = :parent order by type").setParameter("parent", parent); 
     List<Guide> guides= query.list(); 
     return guides; 

我得到关注荷兰国际集团的例外:

IllegalArgumentException occurred calling getter of Guide.idGuide 

而在这之后:

java.lang.IllegalArgumentException: object is not an instance of declaring class 

我在做什么错?

回答

0

已解决。查询应该是:

from Guide g where parent.idGuide = :parent order by type