Pergunta

Eu tenho alguns arquivos * .hbm.xml que são colocados na mesma pasta no arquivo hibernate.cfg.xml. Agora, eu quero para mapear alguns outros arquivos * .hbm.xml que estão em uma subpasta dessa pasta. Como eu poderia fazer isso? Obrigado!

aqui está parte da minha 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>

Isso faz parte do meu arquivo 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>

aqui está a minha estrutura de pastas

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


[Edit]

Eu primeiro tentou e falhou como Maurice sugeriu, mudou a linha

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

ainda dá o mesmo erro:

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

e, em seguida, fui para tentar adicionar em meu schemaexpoert como Mark sugeriu. Em seguida, ele nem sequer encontrar o meu "A.hbm.xml" anymore. Emitindo o erro:

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

Meu SchemaExportTask agora se parece com:

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


[Resolvido]

A conclusão é que eu estava realmente estúpido. Não tinha nada a ver com estar em um diretório diferente. Fiquei confuso porque eu estava mudando duas coisas ao mesmo tempo fase de testes e então eu culpou tudo sobre os inocentes "mudança de diretório". Desculpe por desperdiçar o tempo de todos.

Se alguém estiver interessado, aqui foi o que aconteceu. Eu fiz alguma tradução XSLT usando um arquivo DTD local, e especificado o arquivo DTD local com um caminho relativo no meu arquivo XSL. Mas eu colocar os arquivos hbm.xml gerados em um diretório diferença - daí SchemaExportTask não consegue encontrar o arquivo DTD mais e falhou ao analisar os novos arquivos hbm.xml. E por algum motivo estúpido, eu pensei que as seguintes mensagens de erro completamente diferentes significava a mesma coisa .... Muito obrigado a Mark por me lembrar que as pessoas escreveram mensagens de erro por uma boa razão! Adicionando fileset ainda não funciona agora, mas agora eu sei ler meassages erro ... Eu tenho certeza que vou corrigi-lo em breve. =. = ''

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

Solução

Para uso geral Hibernate Eu concordo com a mudança Maurice sugerido, mas pensei que eu iria dar mais de uma explicação. arquivos de mapeamento do Hibernate são carregados como recursos do classpath. Como você tem $ {base.configuration.hibernate.dir} no seu classpath, você deve dar o caminho do arquivo de mapeamento em relação a esta, portanto, a frente / devem ser removidos.

Para usar a ferramenta de exportação de esquemas de formiga o docs dizer que você deve definir os arquivos de mapeamento como um conjunto de arquivos em vez de esperar que eles sejam encontrados no classpath. Veja

Outras dicas

<mapping resource="dir/B.hbm.xml"/>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top