Tentative d'instance de casting à PersistenceCapable a échoué. Assurez-vous qu'il a été amélioré

StackOverflow https://stackoverflow.com/questions/4102294

  •  29-09-2019
  •  | 
  •  

Question

Je suis en train à OpenJPA 2.0.1 pour la première fois, et je reçois:

79  WARN   [main] openjpa.Runtime - The configuration property named "openjpa.Id" was not recognized and will be ignored, although the name closely matches a valid property called "openjpa.Id".
179  INFO   [main] openjpa.Runtime - Starting OpenJPA 2.0.1
371  INFO   [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.PostgresDictionary" (PostgreSQL 8.4.4 ,PostgreSQL Native Driver PostgreSQL 9.0 JDBC4 (build 801)).
<openjpa-2.0.1-r422266:989424 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: Attempt to cast instance "x.quality.QualityQuery@4c4b11e9" to PersistenceCapable failed.  Ensure that it has been enhanced.
FailedObject: x.quality.QualityQuery@4c4b11e9
    at org.apache.openjpa.kernel.BrokerImpl.assertPersistenceCapable(BrokerImpl.java:4559)
    at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2561)
    at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2423)
    at org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java:1069)
    at org.apache.openjpa.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:706)
    at ...

Selon les docs OpenJPA , je ne devrais pas avoir à tout faire pour obtenir la mise en valeur de base lors de l'exécution:

  

2,5. L'omission de l'amplificateur OpenJPA

     

OpenJPA ne nécessite pas que le   enhancer être exécuté. Si vous ne courez pas le   activateur, OpenJPA retombera à   l'une de plusieurs alternatives possibles   pour le suivi de l'état, en fonction de la   l'environnement d'exécution.

     

Java 6 classe   retransformation:

     

si vous exécutez   votre application dans Java 6   environnement, OpenJPA tentera de   enregistrer dynamiquement une   ClassTransformer qui redéfinira   vos classes persistantes à la volée à   suivre l'accès aux données persistantes.   En outre, OpenJPA va créer un   sous-classe pour chacun de vos persistants   Des classes. Lorsque vous exécutez une requête ou   traverser une relation, OpenJPA volonté   retourner une instance de la sous-classe.   Cela signifie que le instanceof   opérateur fonctionnera comme prévu, mais   o.getClass () retourne la sous-classe   au lieu de la classe que vous avez écrit.   Vous ne devez rien faire du tout   pour obtenir ce comportement. volonté OpenJPA   détecter automatiquement si oui ou non   l'environnement d'exécution est capable   de Java 6 classe retransformation.

Les indices pourquoi cela ne fonctionne pas? Merci beaucoup ...

(points bonus pour la raison pour laquelle l'avertissement openjpa.Id arrive - je n'ai pas mis ces biens ...)

Était-ce utile?

La solution

Aha, se trouve que la réponse devait passer dans:

"openjpa.RuntimeUnenhancedClasses" => RuntimeUnenhancedClassesModes.SUPPORTED

à la carte de configuration. Pourquoi est-ce pas documenté plus clairement, je ne suis pas sûr ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top