Domanda

Ho alcuni file * .hbm.xml che si trovano nella stessa cartella nel file hibernate.cfg.xml. Ora, voglio mappare alcuni altri file * .hbm.xml che si trovano in una sottocartella di questa cartella. Come potrei farlo? Grazie!

ecco parte del mio 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>

Questo fa parte del mio file 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>

ecco la mia struttura di cartelle

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


[Edit]

Ho provato e fallito per la prima volta come suggerì Maurice, cambiando la linea in

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

dà ancora lo stesso errore:

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

e poi ho continuato a provare ad aggiungere al mio schemaexpoert come suggerito Mark. Quindi non troverebbe nemmeno il mio " A.hbm.xml " più. Emissione dell'errore:

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

Il mio SchemaExportTask ora appare come:

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


[Risolto]

La conclusione è che ero davvero stupido. Non aveva nulla a che fare con l'essere in una directory diversa. Mi sono confuso perché stavo cambiando due cose contemporaneamente durante la fase di test e poi ho dato la colpa a tutto l'innocente "cambio di directory". Ci scusiamo per aver perso tempo a tutti.

Se qualcuno è interessato, ecco cosa è successo. Ho fatto alcune traduzioni XSLT usando un file DTD locale e ho specificato il file DTD locale con un percorso relativo nel mio file XSL. Ma ho inserito i file hbm.xml generati in una directory delle differenze, quindi SchemaExportTask non riesce più a trovare il file DTD e non è riuscito ad analizzare i nuovi file hbm.xml. E per qualche stupida ragione, ho pensato che i seguenti messaggi di errore completamente diversi significassero la stessa cosa .... Grazie mille a Mark per avermi ricordato che le persone hanno scritto messaggi di errore per una buona ragione! L'aggiunta di fileset non funziona ancora ora, ma ora so leggere le misure di errore ... Sono sicuro che lo risolverò presto. =. = ''

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

Soluzione

Per un uso generale dell'ibernazione, sono d'accordo con il cambiamento suggerito da Maurice, ma ho pensato di dare più di una spiegazione. I file di mapping di ibernazione vengono caricati come risorse dal percorso di classe. Dato che hai $ {base.configuration.hibernate.dir} sul tuo percorso di classe devi dare il percorso del file di mappatura relativo a questo, quindi il fronte / dovrebbe essere rimosso.

Per usare lo strumento di esportazione dello schema da ant < docs afferma che dovresti definire i file di mappatura come un set di file piuttosto che aspettarti che vengano trovati sul percorso di classe. Vedi

Altri suggerimenti

<mapping resource="dir/B.hbm.xml"/>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top