按JPA InheritanceType.JOINED表中的subclass-property排序

时间:2015-04-30 08:37:26

标签: java jpa eclipselink

我正在使用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();

任何人都可以告诉我,如果这是进行排序的正确方法以及如何完成排序?

0 个答案:

没有答案