1

Ich habe einige * .hbm.xml-Dateien, die in demselben Ordner in der Datei hibernate.cfg.xml abgelegt sind. Nun möchte ich einige andere * .hbm.xml-Dateien zuordnen, die sich in einem Unterordner dieses Ordners befinden. Wie könnte ich es tun? Vielen Dank!Hibernate: Wie eine * .hbm.xml-Datei in einem anderen Ordner zuordnen?

hier ist ein Teil meiner 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> 

Dieser Teil meiner Ant-Datei ist:

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

hier ist meine Ordnerstruktur

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



[Bearbeiten]

ich zum ersten Mal versucht habe und gescheitert wie Maurice vorgeschlagen, geändert, um die Linie zu

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

gibt immer noch den gleichen Fehler:

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

und dann ging ich auf, um zu versuchen Hinzufügen zu meinem Schemaexpoert, wie Mark vorgeschlagen hat. Dann würde ich meine "A.hbm.xml" nicht mehr finden. Geben Sie den Fehler:

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

Mein SchemaExportTask sieht nun wie:

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



[gelöst]

Die Schlussfolgerung ist, dass ich gerade wirklich dumm war. Es hatte nichts damit zu tun, in einem anderen Verzeichnis zu sein. Ich war verwirrt, weil ich zwei Dinge auf einmal änderte und dann die Schuld auf den unschuldigen "Verzeichniswechsel" warf. Entschuldigung, dass wir alle Zeit verschwenden.

Wenn jemand interessiert ist, war hier was passiert ist. Ich habe eine XSLT-Übersetzung mit einer lokalen DTD-Datei durchgeführt und die lokale DTD-Datei mit einem relativen Pfad in meiner XSL-Datei angegeben. Aber ich habe die generierten hbm.xml-Dateien in ein Differenzverzeichnis geschrieben - daher kann SchemaExportTask die DTD-Datei nicht mehr finden und konnte die neuen hbm.xml-Dateien nicht analysieren. Und aus irgendeinem dummen Grund dachte ich, die folgenden völlig unterschiedlichen Fehlermeldungen bedeuteten dasselbe ... Vielen Dank an Mark, dass er mich daran erinnert hat, dass Leute aus gutem Grund Fehlermeldungen geschrieben haben! Das Hinzufügen von fileset funktioniert immer noch nicht, aber ich weiß jetzt, dass ich Fehlermeldungen gelesen habe ... Ich bin mir sicher, dass ich es bald beheben werde. =. = ‚‘

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

Können Sie eine Fehlermeldung hinzufügen, die Sie erhalten haben? – Mark

Antwort

3

Für allgemeine Hibernate Nutzungs ich mit Änderung zustimmen Maurice vorgeschlagen, aber dachte, dass ich eher eine Erklärung geben würde. Hibernate Mapping-Dateien werden als Ressourcen aus dem Klassenpfad geladen. Da Sie $ {base.configuration.hibernate.dir} auf Ihrem Klassenpfad haben, müssen Sie den Pfad der Zuordnungsdatei relativ dazu angeben, daher sollte die Front/entfernt werden.

Für die Verwendung des Schema-Export-Tools von ant die docs sagen, dass Sie die Zuordnungsdateien als Dateigruppe definieren sollten, anstatt zu erwarten, dass sie im Klassenpfad gefunden werden. Siehe

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

versucht, dass .. leider immer noch nicht funktioniert ... – tomato

Verwandte Themen