java - Hibernate 单表继承与自连接

标签 java hibernate

我有以下类(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>

当我尝试获取给定父级的所有指南时

 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/

相关文章:

java - 如何在加载到 pojo 时跳过 xml 元素(在 xstream/jaxb 中)

java - Lambda 表达式和泛型仅在方法中定义

java - 无法在 Gauge 中解析动态参数

java - 重新安装 Eclipse 后,项目无法在 Eclipse 中打开

java - 如何在Hibernate中映射这种关系?

java - Android : adb shell, 找不到命令 adb

java - 不可变对象(immutable对象)的 Hibernate 组件映射

java.lang.ClassCastException : [Ljava. lang.Object 或 LazyInitializationException 异常

java - 在Grails中将listAgg与H2数据库一起使用

java - 如何使用hibernate和可选参数进行查询?