Pregunta

Tengo algunos archivos * .hbm.xml que se colocan en la misma carpeta en el archivo hibernate.cfg.xml. Ahora, quiero asignar algunos otros archivos * .hbm.xml que están en una subcarpeta de esta carpeta. ¿Cómo podría hacerlo? Gracias!

Esto es parte de mi 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>

Esto es parte de mi archivo 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>

Aquí está mi estructura de carpetas

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



[Editar]

Primero lo intenté y fallé como Maurice sugirió, cambié la línea a

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

todavía da el mismo error:

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

y luego continué intentando agregar a mi schemaexpoert como sugirió Mark. Entonces ni siquiera encontraría mi " A.hbm.xml " nunca más. Saliendo del error:

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

Mi SchemaExportTask ahora se ve así:

        <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>



[Resuelto]

La conclusión es que yo era realmente estúpido. No tenía nada que ver con estar en un directorio diferente. Me confundí porque estaba cambiando dos cosas a la vez en la fase de prueba y luego lo culpé todo al inocente "cambio de directorio". Lo siento por perder el tiempo de todos.

Si alguien está interesado, aquí fue lo que pasó. Hice una traducción XSLT utilizando un archivo DTD local, y especifiqué el archivo DTD local con una ruta relativa en mi archivo XSL. Pero puse los archivos hbm.xml generados en un directorio de diferencias, por lo que SchemaExportTask ya no puede encontrar el archivo DTD y no pudo analizar los nuevos archivos hbm.xml. Y por alguna razón estúpida, pensé que los siguientes mensajes de error completamente diferentes significaban lo mismo ... ¡Muchas gracias a Mark por recordarme que las personas escribieron mensajes de error por una buena razón! La adición de fileset todavía no funciona, pero ahora sé leer las medidas de error ... Estoy seguro de que lo arreglaré pronto. =. = ''

Schema text failed: resource: B.hbm.xml not found
Schema text failed: Could not parse mapping document from resource dir/B.hbm.xml
¿Fue útil?

Solución

Para el uso general de Hibernate, estoy de acuerdo con el cambio que Maurice sugirió, pero pensé que daría más explicaciones. Los archivos de mapeo de Hibernate se cargan como recursos de la ruta de clase. Como tiene $ {base.configuration.hibernate.dir} en su ruta de clase, debe indicar la ruta del archivo de mapeo en relación con esto, por lo tanto, el frente / debe eliminarse.

Para usar la herramienta de exportación de esquemas de ant y docs dice que debe definir los archivos de mapeo como un conjunto de archivos en lugar de esperar que se encuentren en la ruta de clase. Ver

Otros consejos

<mapping resource="dir/B.hbm.xml"/>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top