是否可以查询基类的实体,但是可以通过子类的属性进行排序?
例如,(JPA注释省略)
class Base
{
int base;
}
class SubA extends Base
{
int subA;
}
class SubB extends Base
{
int subB;
}
并假设数据库包含所有3个类的实例。
我想以多态方式检索所有Base实例,并对子类的属性进行排序。如果该属性不存在,则假定它为null。 (想象一下,所有这些实例都显示在一个包含所有属性的表中,并且允许用户对任何属性进行排序。)
我希望有类似的东西:
select b from Base b order by b.subA
但显然无法识别subA属性。
有没有办法尝试强制转换,以便可以使用subA属性?
答案 0 :(得分:1)
抱歉,这是不可能的。
但你可以使用这样的东西:
TypedQuery<Base> baseQ = em.createQuery("SELECT b FROM Base b", Base.class);
List<Base> resultList = baseQ.getResultList();
Collections.sort(resultList, new Comparator<Base>() {
@Override
public int compare(Base b1, Base b2) {
...
}
});