2

我有一个AbstractPerson,它有两个子类:LegalPersonPhysicalPerson

@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 对子类属性的查询结果进行排序的解决方案?

谢谢,最好的问候,赛斯。

4

2 回答 2

1

Criteira API 定义了一个 as() API,允许您转换到另一个类。我认为这应该适用于子类,至少对于 EclipseLink 它应该。

如果它们都有名称,您应该考虑将名称向上移动到超类中。按仅在子类中的字段排序会产生奇怪的顺序,因为您将首先获得所有 LegalPersons,然后是所有 PhysicalPersons。

于 2013-07-17T13:34:03.207 回答
0

我花了几天时间与 JPA 标准中的多态性作斗争。我得出的结论是,当涉及到多态查询时,jpa 标准没有帮助。

您可以实现的最佳效果是通过相当复杂的存在子查询构造来限制子类的属性。

我的建议是:尽可能避免使用标准。

如果你有一个静态查询,也许你对 JPQL 更幸运。

于 2013-07-19T15:21:15.857 回答