【发布时间】:2021-01-11 02:13:06
【问题描述】:
给定三个实体 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 开始提升继承层次并读取超类A 内部字段,特别是c。我想知道这在hibernate中是否可行。否则,任何替代解决方案都将受到欢迎。
【问题讨论】: