Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Hibernate获取视图映射的抽象超类将返回无效的列名_Java_Oracle_Hibernate - Fatal编程技术网

Java 使用Hibernate获取视图映射的抽象超类将返回无效的列名

Java 使用Hibernate获取视图映射的抽象超类将返回无效的列名,java,oracle,hibernate,Java,Oracle,Hibernate,情况如下。假设我有一个孩子,我想得到他的父母。抽象父对象位于视图中。父母可以是母亲也可以是父亲。母亲也在视图中定义 @Entity public class Kid extends DomainObject { private IParent theParent; @ManyToOne(fetch = FetchType.LAZY, targetEntity = Parent.class) @JoinColumn(name = "TheParentId") pu

情况如下。假设我有一个孩子,我想得到他的父母。抽象父对象位于视图中。父母可以是母亲也可以是父亲。母亲也在视图中定义

@Entity
public class Kid extends DomainObject {
    private IParent theParent;

    @ManyToOne(fetch = FetchType.LAZY, targetEntity = Parent.class)
    @JoinColumn(name = "TheParentId")
    public IParent getTheParent() {
        return theParent;
    }

    @Override
    public void setTheParent(IParent theParent) {
        this.theParent = theParent;
    }
}

@Entity
@Inheritance(strategy= InheritanceType.JOINED)
@Table(name = "Parent")
public abstract class Parent {

}

@Entity
public class Mother extends Parent {

}
因此,使用Hibernate,我尝试通过在Kid上调用getTheParent()来检索母亲对象:

这在数据库中运行良好。但通过Hibernate运行时,它返回SQL异常:无效列名(未知)


有几个指针可能是原因。在旧数据库中,母亲和父亲是表的,而不是视图。我猜Hibernate理解链接是因为外键。将父项从表更改为视图会中断应用程序。但四处搜索指出,Hibernate在某种程度上平等地对待视图和表。为什么直接输入时获取Hibernate使用的精确查询有效,而使用Hibernate时却无效?

问题似乎出在查询的select子句中。当向select列添加多个对象时(使用比Kid、母亲和父亲更多的表运行得更深),Hibernate会感到困惑。当我只使用Kid对象(并使用Kid.getX().getY().getZ()填充项目)时,Hibernate获取所有内容都没有问题

似乎是冬眠中的一只虫子

from Kid hobj left join  fetch  hobj.theParent pa