情况如下。说我有个孩子,我想找他的父母。抽象父级位于视图中。父母可以是母亲,也可以是父亲。母亲也被定义在一个视图中。
@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()来检索母对象:
from Kid hobj left join fetch hobj.theParent pa这在数据库中运行得很好。但是,当通过Hibernate运行时,它返回SQL异常:无效列名(未知)
有几个指点可能是原因。在旧的数据库中,母亲和父亲是表而不是视图。我猜Hibernate理解这个链接是因为外键。将父表从“表”更改为“查看”会破坏应用程序。但是搜索发现Hibernate对待View和Table(在某种程度上)是平等的。为什么直接输入Hibernate而不是使用Hibernate时得到Hibernate所使用的确切查询?
发布于 2014-07-02 09:31:21
问题似乎在查询的select子句中。当向select列添加多个对象时(使用更多表运行得更深,然后是Kid、母亲和父亲),Hibernate会感到困惑。当我只使用Kid对象时(并使用Kid.getX().getY().getZ()填充项.),Hibernate获取所有东西都没有问题。
似乎是Hibernate中的一个bug。
https://stackoverflow.com/questions/24505982
复制相似问题