JPA / hibernate按子类属性排序

时间:2011-09-27 00:45:21

标签: java hibernate jpa polymorphism

是否可以查询基类的实体,但是可以通过子类的属性进行排序?

例如,(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属性?

1 个答案:

答案 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) {
        ...
    }
});