2010-08-16 4 views
1

J'ai une existante de travail requête qui sélectionne une colonne d'une entité mappée à une vue Oracle en utilisant les éléments suivants JPQLImpossible de sélectionner une colonne à partir d'un Oracle View en utilisant l'API critères JPA 2

SELECT COUNT(o.id) FROM MyEntityView o 

I refactorisé à utiliser l'API de critères JPA 2 avec le code suivant:

MyEntityView model = new MyEntityView(); 
    CriteriaBuilder criteriaBuilder = model.entityManager().getCriteriaBuilder(); 
    CriteriaQuery<Long> criteriaQuery = criteriaBuilder.createQuery(Long.class); 
    Root<MyEntityView > theView = criteriaQuery.from(MyEntityView.class); 

    criteriaQuery.select(criteriaBuilder.count(theView.get(MyEntityView_.id))); // ERROR! 
    TypedQuery<Long> query = model.entityManager().createQuery(criteriaQuery); 
    .... 

Mais il génère l'erreur suivante sur la création de l'instruction select:

java.lang.NullPointerException 
    at org.hibernate.ejb.criteria.path.AbstractPathImpl.unknownAttribute(AbstractPathImpl.java:110) 
    at org.hibernate.ejb.criteria.path.AbstractPathImpl.locateAttribute(AbstractPathImpl.java:218) 
    at org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:189) 
    at com.mycomp.domain.view.MyEntityViewIntegrationTest.testMarkerMethod(MyEntityViewIntegrationTest.java:35) 

J'ai essayé de changer le mappage à une table au lieu d'une vue et le ne fonctionne pas correctement.

Est-ce un bug d'Hibernate ou manque-t-il quelque chose?

+0

Récupération de colonne modifiée de String à MetaModel pour éviter toute confusion. – Joopiter

Répondre

1

Cette ressemble comme un bug (similaire au problème signalé dans JPA 2 CriteriaQuery Using ID columns throws Null Pointer EX) et je ne pouvais pas trouver un problème de Jira existant et suggérer de créer un nouveau. Ceci étant dit, je ne vois pas vraiment l'intérêt d'utiliser ici un CriteriaQuery, surtout si vous n'utilisez pas le métamodèle statique pour une sécurité complète. C'est peut-être un exemple simplifié.

+0

Merci, C'est un exemple simplifié. Pendant ce temps, je vais recourir à JPQL – Joopiter

Questions connexes