给定三个实体 A、B 和 C,其中 B 扩展 A,例如:
@Entity
@Table(name = "a")
public class A {
private C c;
//omitted source code
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "c_id", nullable = false)
public C getC() {
return c;
}
public void setC(C c){
this.c=c;
}
}
@Entity
@Table(name = "b")
public class B extends A {
private Integer id;
//omitted source code
}
@Entity
@Table(name = "c")
public class C {
private Integer id;
private String status;
//omitted source code
}
如何将以下原生 SQL 转换为 HQL:
select b.* from b b_
inner join a a_ on a_.id=b_.id
inner join c c_ on a_.c_id=c_.id
where c_.status='ACCEPTED';
我尝试了以下方法:select b from B b join b.c c where c.status = 'ACCEPTED'
但是我得到了这个异常: org.hibernate.QueryException: could not resolve property: c of: B
。我认为 Hibernate 会在运行时解析超类字段。
我在这里想要实现的是提升继承层次结构,并准确地从超类内部字段开始from B
读取,特别是. 我想知道这在hibernate中是否可行。否则,任何替代解决方案都将受到欢迎。A
c