2010-03-17 11 views
0

J'ai configuré un projet en utilisant à la fois Jdo et Jpa. J'ai utilisé l'annotation Jpa pour déclarer mon entité. Ensuite, j'ai configuré mon testCases basé sur LocalTestHelper (à partir de la documentation de Google App Engine). Lorsque je lance le test, un appel à makePersistent de Jdo:PersistenceManager est parfaitement OK; un appel à persist de Jpa:EntityManager a soulevé une erreur:Google App Engine: JDO fait le travail, JPA ne

java.lang.IllegalArgumentException: Type ("org.seamoo.persistence.jpa.model.ExampleModel") is not that of an entity but needs to be for this operation 
    at org.datanucleus.jpa.EntityManagerImpl.assertEntity(EntityManagerImpl.java:888) 
    at org.datanucleus.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:385) 
Caused by: org.datanucleus.exceptions.NoPersistenceInformationException: The class "org.seamoo.persistence.jpa.model.ExampleModel" is required to be persistable yet no Meta-Data/Annotations can be found for this class. Please check that the Meta-Data/annotations is defined in a valid file location. 
    at org.datanucleus.ObjectManagerImpl.assertClassPersistable(ObjectManagerImpl.java:3894) 
    at org.datanucleus.jpa.EntityManagerImpl.assertEntity(EntityManagerImpl.java:884) 
    ... 27 more 

Comment peut-il être le cas? est Ci-dessous le lien vers le code source compacte des projets Maven qui reproduisent ce problème: Mise à jour: http://seamoo.com/jpa-bug-reproduce-compact.tar.gz

Execute l'objectif de test Maven sur le parent pom vous remarquerez que les 3/4 des tests de org.seamoo .persistence.jdo.JdoGenericDAOImplTest transmis, alors que tous les tests de org.seamoo.persistence.jpa.JpaGenericDAOImplTest ont échoué.

Répondre

2

Vous n'avez donc pas amélioré vos classes de modèle, ou n'avez pas fourni de métadonnées de persistance (XML, annotations) pour elles (lors de l'exécution). Le journal vous dit beaucoup d'informations. Et je ne pense vraiment pas que le fait de présenter des tgz à des personnes avec 3 projets distincts et de s'attendre à ce qu'ils trouvent la classe particulière à laquelle vous faites référence pourrait être appelé «utilisation optimale de leur temps». Coupez-le à la classe réelle, ses métadonnées et un échantillon Main

+0

Salut, désolé pour tout inconvénient. J'ai mis à jour mon code source et supprimer tout le code qui est hors de la portée du problème. Au fait, ce qui m'intéressait, c'est que: J'ai utilisé l'annotation JPA pour mes entités, mais l'API JDO fonctionne bien avec ces entités, contrairement à l'API JPA. Comme vous pouvez le voir dans le code source, 'ExampleModel' a été amélioré par le plugin maven datanucleus. Même si, étant donné que j'ai manqué l'une des données requises, pourquoi JDO fonctionne-t-il? –

+0

JDO fonctionne (avec entrée JDO ou JPA), JPA fonctionne (avec entrée JDO ou JPA). Toutes ces personnes sur le forum GAE/J en utilisant JPA ne peuvent pas se tromper :-P. Le test est "nettoyé"? Je m'attendrais à une classe de modèle et une main, et persistence.xml. C'est tout ce dont il a besoin. Non, je ne vois rien sur ce qui a été amélioré; votre journal vous le dit. Amélioré vos cours? (pour JPA?). Quand vous courez, qu'y avait-il dans le CLASSPATH? Le journal (niveau DEBUG) vous dit tout cela, il serait donc logique de le regarder. – DataNucleus

Questions connexes