Наследование JPA TABLE_PER_CLASS: Как выбрать только записи суперкласса SELECT?

Я использую EclipseLink в качестве поставщика JPA. Далее я использую следующую структуру наследования TABLE_PER_CLASS

@javax.persistence.Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@NamedQueries({
    @NamedQuery(name=Parent.QUERY_FIND_ALL, query="SELECT p FROM Parent p")
})
public class Parent {
        // the class code follows here
}

@javax.persistence.Entity 
@NamedQueries({
    @NamedQuery(name=Child.QUERY_FIND_ALL, query="SELECT c FROM Child c")
})

public class Child extends Parent {
        // the class code follows here
}

. Проблема в том, что я хочу получать только записи родительского класса. Но с именованным запросом «SELECT p FROM Parent p» также возвращаются все записи из дочерней таблицы.

Код выбора или поиска выглядит следующим образом:

public List findWithNamedQuery(String query) {
        return em.createNamedQuery(query).getResultList();
}

Таким образом, запрос - это «SELECT p FROM Parent p».

Как я могу получать действительно только родительские записи, а не все записи этой иерархии наследования?

Вкратце: Как я могу оставить все дочерние записи нетронутыми и вернуть только родительские записи?

РЕДАКТИРОВАТЬ 1:
Я использую EclipseLink 2.0.1, но каждый раз, когда я пытаюсь использовать решение axtavt с помощью выражения типа, я получаю следующую ошибку:

"Invalid Type Expression on [my.domain.Parent].  The class does not have a descriptor, or a descriptor that does not use inheritance or uses a ClassExctractor for inheritance".

Я также обновился до последней стабильной версии 2.1. 1 EclipseLink, но это не решает проблему.

6
задан Darrell Teague 12 March 2013 в 21:03
поделиться