1 votes

Hiberner : Comment mapper un fichier *.hbm.xml dans un autre dossier ?

J'ai quelques fichiers *.hbm.xml qui sont placés dans le même dossier que le fichier hibernate.cfg.xml. Maintenant, je veux mapper d'autres fichiers *.hbm.xml qui sont dans un sous-dossier de ce dossier. Comment puis-je le faire ? Je vous remercie.

voici une partie de mon hibernate.cfg.xml :

   <hibernate-configuration>
        <session-factory name="MySessionFactory">
             <!-- some hibernate properties here --> 

             <!--This below works fine-->
             <mapping resource="A.hbm.xml"/>

             <!--This doesn't-->
             <mapping resource="/dir/B.hbm.xml"/>

        </session-factory>
   </hibernate-configuration>

Il s'agit d'une partie de mon fichier Ant :

        <target name="generateHibernateSql">

        <taskdef name="SchemaExportTask"
            classname="org.hibernate.tool.hbm2ddl.SchemaExportTask"
        >
            <classpath>
                <pathelement location="${build.classes.main.dir}"/>
                <pathelement location="${base.configuration.hibernate.dir}"/>
                <path refid="build.classpath.lib"/>
            </classpath>
        </taskdef>

Voici la structure de mon dossier

${base.configuration.hibernate.dir}
   | hibernate.cfg.xml
   | A.hbm.xml
   |--dir
   |---| B.hbm.xml
${build.classes.main.dir}

[Editer]

J'ai d'abord essayé, sans succès, comme le suggérait Maurice, de changer la ligne en

 <mapping resource="dir/B.hbm.xml"/>

donne toujours la même erreur :

Schema text failed: Could not parse mapping document from resource dir/B.hbm.xml

et j'ai ensuite essayé d'ajouter dans mon schemaexpoert comme Mark l'a suggéré. Il n'a alors même plus trouvé mon "A.hbm.xml". Il a affiché l'erreur :

Schema text failed: Could not parse mapping document from resource A.hbm.xml

Ma SchemaExportTask se présente désormais comme suit :

        <SchemaExportTask
            config="${base.configuration.hibernate.dir}\hibernate.cfg.xml"
            quiet="no"
            text="no"
            drop="no"
            delimiter=";"
            create="yes"
            output="${dist.database.dir}\schema-export.sql"
        >
            <fileset dir="${base.configuration.hibernate.dir}">
                <include name="**/*.hbm.xml"/>
            </fileset>
        </SchemaExportTask>

[Résolu]

La conclusion est que j'étais vraiment stupide. Cela n'avait rien à voir avec le fait d'être dans un autre répertoire. Je me suis embrouillé parce que je changeais deux choses à la fois pendant la phase de test et j'ai tout mis sur le dos de l'innocent "changement de répertoire". Désolé d'avoir fait perdre du temps à tout le monde.

Si cela intéresse quelqu'un, voici ce qui s'est passé. J'ai effectué une traduction XSLT en utilisant un fichier DTD local, et j'ai spécifié le fichier DTD local avec un chemin relatif dans mon fichier XSL. Mais j'ai placé les fichiers hbm.xml générés dans un répertoire différent -- SchemaExportTask ne peut donc plus trouver le fichier DTD et ne parvient pas à analyser les nouveaux fichiers hbm.xml. Et pour une raison stupide, je pensais que les messages d'erreur suivants, complètement différents, signifiaient la même chose.... Merci beaucoup à Mark de m'avoir rappelé que les gens ont écrit des messages d'erreur pour une bonne raison ! Ajout fileset ne fonctionne toujours pas, mais je sais maintenant qu'il faut lire les messages d'erreur...je suis sûr que je vais bientôt y arriver. =.=''

Schema text failed: resource: B.hbm.xml not found
Schema text failed: Could not parse mapping document from resource dir/B.hbm.xml

3voto

Maurice Perry Points 18154
<mapping resource="dir/B.hbm.xml"/>

3voto

Mark Points 14208

Pour l'utilisation générale d'Hibernate, je suis d'accord avec le changement suggéré par Maurice, mais j'ai pensé donner plus d'explications. Les fichiers de mapping d'Hibernate sont chargés en tant que ressources depuis le classpath. Comme vous avez ${base.configuration.hibernate.dir} sur votre classpath, vous devez donner le chemin du fichier de mapping relatif à celui-ci, donc le / avant doit être supprimé.

Pour l'utilisation de l'outil d'exportation de schémas à partir de la fourmi, l'outil documents indiquent qu'il convient de définir les fichiers de mappage comme un jeu de fichiers plutôt que de s'attendre à ce qu'ils soient trouvés sur le chemin d'accès (classpath). Voir

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X