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

StackOverflow https://stackoverflow.com/questions/4256393

Вопрос

Я использую 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
}

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

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

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

Тем самым запрос IE «Select P из родителя p».

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

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

Редактировать 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, но это не решает проблему.

Это было полезно?

Решение 2

Выражение типа в сочетании с наследованием Table_Per_Class не работает под EclipseLink 2.1.1, это, кажется, ошибка.

Смотрите также ответ на JPA 2.0: Исключение выражения типа

Другие советы

Если ваша версия ECLIPSELINK поддерживает JPA 2.0, вы можете написать

SELECT p FROM Parent p WHERE TYPE(p) = Parent
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top