Domanda

sto usando EclipseLink come provider JPA. Inoltre sto usando la seguente struttura di ereditarietà 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
}

Il problema ora è che voglio solo ricevere le voci della classe genitore. Ma con la query denominata "SELEZIONE P da Parent p" anche tutte le voci dalla tabella figlio vengono restituiti.

Il codice di selezionare o trovare è la seguente:

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

In tal modo query è cioè il "SELEZIONA p FROM Parent p".

Come posso ricevere veramente solo le voci di madri e non tutte le voci di questa gerarchia inheritacne?

In breve: Come posso lasciare tutti gli elementi figlio intatta, e restituire solo le voci genitori

?

Modifica 1:
Sto utilizzando EclipseLink 2.0.1, ma ogni volta che provo soluzione axtavt tramite l'espressione tipo, ho il seguente errore:

"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".

Ho aggiornato anche l'ultima versione stabile 2.1.1 di EclipseLink, ma non risolve il problema.

È stato utile?

Soluzione 2

L'espressione tipo in combinazione con TABLE_PER_CLASS eredità doesn' t lavoro sotto EclipseLink 2.1.1, questo sembra essere un bug.

Si veda anche la risposta al JPA 2.0: fa eccezione l'espressione TIPO

Altri suggerimenti

Se la versione di EclipseLink supporta JPA 2.0, è possibile scrivere

SELECT p FROM Parent p WHERE TYPE(p) = Parent
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top