2010-11-24 27 views
7

Je travaille actuellement sur une migration système (de Hibernate 3.2.2.GA avec JPA1 à Hibernate 3.6 avec JPA2.) La migration elle-même est très simple, il n'y a pas de mises à jour majeures à faire (en fait, je ne pense pas .. il n'y a pas du tout)Hibernate 3.5 ou 3.6 sans prise en charge de l'annotation @Any?

le problème que je suis confronté est que veille prolongée lance une exception à l'exécution, se plaignant des annotations @Any le stacktrace est le suivant:

Caused by: java.lang.UnsupportedOperationException: any not supported yet 
    at org.hibernate.ejb.metamodel.AttributeFactory.determineAttributeMetadata(AttributeFactory.java:452) 
    at org.hibernate.ejb.metamodel.AttributeFactory.buildAttribute(AttributeFactory.java:93) 
    at org.hibernate.ejb.metamodel.MetadataContext.wrapUp(MetadataContext.java:183) 
    at org.hibernate.ejb.metamodel.MetamodelImpl.buildMetamodel(MetamodelImpl.java:66) 
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84) 
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:902) 
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74) 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:225) 

donc cela signifie que @Any ou @ManyToAny ne sont plus supportés par hibernate Ceci est bizarre car la documentation (de 3.3 à 3.6) mentionne comment utiliser l'annotation @Any et AFAIK il n'y a pas de version hibernate qui déprécie cet annot ation.

J'ai vérifié le code source d'hibernate 3.5 et la vérification des annotations @Any y est également présente, donc il lance aussi la même exception.

Avez-vous des solutions de contournement pour ce problème?

merci beaucoup!

+1

Ils ne sont pas pris en charge que si vous utilisez JPA interface. Avec 'SessionFactory', ils fonctionnent bien. – axtavt

+0

c'est étrange ... ça marche sur hibernate 3.2 avec jpa1. allez comprendre. Je vais rester avec 3.2 pour l'instant =/ –

+2

C'est assez clair. JPA2 inclut le support du métamodèle. Comme il n'est pas clair comment représenter les attributs '@ Any 'dans un métamodèle, ils doivent interdire de tels attributs (il peut être déduit de la stacktrace). – axtavt

Répondre

5

Voulez-vous s'il vous plaît essayer d'ajouter à vos propriétés Hibernate:

hibernate.ejb.metamodel.generation=disabled 

Cela devrait désactiver la génération de métamodèle, en évitant l'exception que vous voyez. (Edited valeur de la propriété pour dire « handicapé » comme l'a souligné dans les commentaires)

+0

Merci Partenon, je vais essayer ça la semaine prochaine et rapporter le résultat ici. –

+1

Un petit amendement à votre réponse partenon: c'est "désactivé" au lieu de "désactiver". À part ça, ça fonctionne vraiment. Merci encore! –

1

Ou, si vous ne l'utilisez hibernate.properties, ajoutez à votre <property name="hibernate.ejb.metamodel.generation" value="disabled" /> persistence.xml