我有以下类(class):
指导类:
public abstract class Guide
{
private Long idGuide;
private String name;
private GuideContainer parent;
/** GETTERS & SETTERS*/
}
指南容器:
public class GuideContainer extends Guide
{
private Guide children;
/** GETTER & SETTERS */
}
指南文件:
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>
指南文件:
<hibernate-mapping>
<subclass extends="Guide" name="GuideFile" discriminator-value="file">
<property name="uri" type="java.lang.String" column="uri" />
</subclass>
</hibernate-mapping>
指南容器:
<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>
当我尝试获取给定 parent 的所有指南时
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
我究竟做错了什么?
最佳答案
解决了。查询应该是:
from Guide g where parent.idGuide = :parent order by type
关于java - 带有自连接的 hibernate 单表继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21167807/