Я использую 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» также возвращаются все записи из дочерней таблицы.
Выберите или найдите код следующим образом:
public List findWithNamedQuery(String query) {
return em.createNamedQuery(query).getResultList();
}
Таким образом, запросом является то, что «ВЫБРАТЬ p ИЗ 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".
Я также обновил EclipseLink до последней стабильной версии 2.1.1, но это не решает проблему.