我正在使用JPA和EclipseLink以及InheritanceType.JOINED
结构:
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@Table(name="PARENT")
@DiscriminatorColumn(name="TYPE")
public abstract class Parent { ... }
@Entity
@Table(name="CHILD_A")
@DiscriminatorValue("A")
public class ChildA extends Parent { ... }
@Entity
@Table(name="CHILD_B")
@DiscriminatorValue("B")
public class ChildB extends Parent { ... }
如果我使用Criteria-API查询类型Parent.class
的数据,则生成的SQL Statment看起来像
SELECT t0.ID, ..., t1.ID, ..., t2.ID FROM
PARENT t0
LEFT OUTER JOIN CHILD_A t1 ON (t1.ID = t0.ID)
LEFT OUTER JOIN CHILD_B t2 ON (t2.ID = t0.ID)
WHERE ...
ORDER BY t0.PROPERTY ASC
也许这是一个愚蠢的问题,但有没有可能通过Criteria-API在ORDER子句中使用连接属性(来自CHILD_A或CHILD_B)?
我做了以下事情:
CriteriaBuilder cb = this.getEntityManager().getCriteriaBuilder();
CriteriaQuery<Parent> q = cb.createQuery(Parent.class);
Root<Parent> c = q.from(Parent.class);
// FIXME: Don't know how to add orderBy of subclass property
TypedQuery<Parent> query = em.createQuery(q);
return query.getResultList();
任何人都可以告诉我,如果这是进行排序的正确方法以及如何完成排序?