2010-11-23 12 views
6

Estoy usando EclipseLink como el proveedor de JPA. Además estoy usando la siguiente estructura de herencia TABLE_PER_CLASSHerencia de JPA TABLE_PER_CLASS: ¿Cómo solo SELECCIONAR las entradas de superclase?

@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 
} 

El problema ahora es que sólo quiero recibir las instancias de la clase padre. Pero con la consulta llamada "SELECT p FROM Parent p" también se devuelven todas las entradas de la tabla secundaria.

El seleccione o encontrar el código es el siguiente:

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

De esta manera es decir, la consulta "SELECT P De padre P".

¿Cómo solo puedo recibir realmente las entradas principales y no todas las entradas de esta jerarquía inheritacne?

En resumen: ¿Cómo puedo dejar todas las entradas secundarias sin tocar y devolver solo las entradas principales?

EDIT 1:
estoy usando EclipseLink 2.0.1, pero cada vez que intente la solución de axtavt a través de la expresión de tipo, me sale el siguiente error:

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

He actualizado también a la última versión estable 2.1.1 de EclipseLink, pero no resuelve el problema.

+1

¿Alguna vez resolver esto? Estoy tratando de hacer lo mismo. Para mi consulta, solo quiero que se devuelvan las filas primarias, pero también se devuelven las filas secundarias. –

+0

¿Alguna actualización de esta pregunta? Quiero decir, ¿alguna vez has encontrado la respuesta para este @gerry –

Respuesta

4

La expresión de tipo en combinación con TABLE_PER_CLASS herencia doesn' t trabajo bajo EclipseLink 2.1.1, esto parece ser un error.

Véase también la respuesta a JPA 2.0: TYPE expression exception

8

Si su versión de EclipseLink apoya JPA 2.0, puede escribir

SELECT p FROM Parent p WHERE TYPE(p) = Parent 
Cuestiones relacionadas