2009-04-03 14 views
1

Le code simple suivant émet une exception:JPQL CreateQuery lance IllegalArgumentException

entityManager.createQuery("SELECT c FROM Customer c"); 

Mais si j'écris

entityManager.createNativeQuery("SELECT c.* FROM Customer c", Customer.class) 

il fonctionne sans aucune erreur. Quel pourrait être le problème? J'utilise GlassFish v2.1 avec Toplink-essentials.

+0

Pourriez-vous ajouter la trace de pile de l'exception? –

Répondre

0

La requête JPQL "SELECT c FROM Customer c" est valide tant que vous avez défini une classe Client comme Entité. Cette méthode ne jette une exception si la requête est « invalide » pour une raison quelconque, et une bonne mise en œuvre de l'APP devrait donner plus d'informations dans le message de l'exception s'il y a un problème

--Andy (DataNucleus)

+0

Merci Andy. J'ai une classe Customer avec une annotation @Entity. Comme je l'ai dit, la requête native renvoie les objets client sans problème, mais la requête jpa ordinaire ne fonctionne pas. – synergetic

+0

Donc, je suggère que vous utilisiez le journal TopLink et la liste de diffusion, ou que vous essayiez d'autres implémentations JPA (par exemple DataNucleus) qui supportent certainement cette syntaxe. – DataNucleus

+0

Ok, Andy tu avais raison. J'ai utilisé le nom de la table au lieu du nom de la classe. En fait, ma requête était "SELECT c FROM customer_info c". – synergetic

Questions connexes