java - JPA/hibernate 按子类属性排序

标签 java hibernate jpa polymorphism

是否可以查询基类的实体,但按子类的属性排序?

例如,(JPA注释省略)

class Base
{
   int base;
}

class SubA extends Base
{
   int subA;
}

class SubB extends Base
{
   int subB;
}

并假设数据库包含所有 3 个类的实例。

我想以多态方式检索所有 Base 实例,并按子类的属性排序。如果该属性不存在,则假定它为空。 (想象一下所有这些实例都显示在一个表中,具有所有属性,并且允许用户对任何属性进行排序。)

我希望得到类似的东西:

select b from Base b order by b.subA

但显然 subA 属性未被识别。

是否有某种方法可以尝试进行强制转换以便可以使用 subA 属性?

最佳答案

抱歉,这是不可能的。

但是你可以使用这样的东西:

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

关于java - JPA/hibernate 按子类属性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7563012/

相关文章:

java - Hibernate完整性约束冲突: NOT NULL check constraint: For onetoOne Mapping using spring boot crud

java - 使用 Web 服务和 2 路 SSL

java - Hibernate 4.3.5 - hibernate-entitymanager-4.3.5.Final.jar 有什么用

hibernate - Hibernate session 工厂找不到 DAO 注释中定义的 NamedQuery

java - 按时间间隔 hibernate 分组

sql - 处理 ORA-01795 :maximum number of expressions in a list is 1000 in hibernate 的最有效方法

java - 我如何映射到具有同一实体的两个字段的对象?

java - 如何使用 [Apache POI] 创建依赖下拉列表

java - 使用现有表的 Hibernate 继承

java - 在 Windows 7 上构建 Apache Roller