我有一个 AbstractPerson 作为两个子类: LegalPerson 和 PhysicalPerson 。
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class AbstractPerson {
private Long id;
...
}
@Entity
public class LegalPerson extends AbstractPerson {
private String name;
...
}
@Entity
public class PhysicalPerson extends AbstractPerson {
private String lastName;
private String firstName;
...
}
当我检索所有实体时(基于AbstractPerson的CriteriaQuery)我会通过LegalPerson.name ASC,PhysicalPerson.lastName ASC,PhysicalPerson.firstName ASC 订购它们。
我需要生成一个按这些标准排序和分组的抽象实体列表。 原始SQL查询允许出现所有子类字段(SINGLE_TABLE策略),但我不知道如何利用它们。
是否有任何解决方案使用Criteria API在子类属性上排序查询结果?
谢谢, 最好的祝福, 塞特。
答案 0 :(得分:1)
Criteira API定义了一个as()API,允许您转换为另一个类。这应该适用于我认为的子类,至少应该使用EclipseLink。
如果它们都有名称,您应该考虑将名称移到超类中。通过仅在子类中的字段进行排序将给出奇数顺序,因为您将首先获得所有LegalPersons然后获得所有PhysicalPersons。
答案 1 :(得分:0)
我花了几天时间在JPA标准中努力解决多态问题。我得出的结论是,在涉及多态查询时,jpa标准没有任何帮助。
您可以实现的最好的方法是通过相当复杂的exists-subquery-construction对子类的属性进行限制。
我的提示是:如果可以,请避免使用标准。
如果你有一个静态查询,也许你对JPQL更幸运。