2010-11-25 3 views
0

Ich arbeite mit der Datanucleus Tutorial-Anwendung für JDO, specifically this one.Datanucleus Schema-Generierung ignoriert "Vererbungsstrategie =" Direktive

Egal welche "Vererbungsstrategie" Ich versuche das Tabellenlayout ist das gleiche. Ich möchte zwei Tabellen, eine für PRODUCT und eine für BOOK, aber mit der Konfiguration unten bekomme ich nur die Tabelle PRODUCT mit Spalten für beide Klassen Produkt und Klasse Buch.

<class name="Product" identity-type="sequence"> 
     <inheritance strategy="complete-table"/> 
     <field name="name"> 
      <column name="PRODUCT_NAME" length="100" jdbc-type="VARCHAR"/> 
     </field> 
     <field name="description"> 
      <column length="255" jdbc-type="VARCHAR"/> 
     </field> 
    </class> 

    <class name="Book" identity-type="sequence"> 
     <field name="author"> 
      <column length="40" jdbc-type="VARCHAR"/> 
     </field> 
     <field name="isbn"> 
      <column length="20" jdbc-type="CHAR"/> 
     </field> 
     <field name="publisher"> 
      <column length="40" jdbc-type="VARCHAR"/> 
     </field> 
    </class> 

Die Verzeichnisstruktur ist genau wie im Tutorial, ebenso wie die Datei build.xml. Ich habe versucht, das Schema über die Ant-Aufgabe und die Befehlszeile zu generieren.

Ich benutze die Befehlsfolge „konkurrieren Tisch“

ant clean 
    ant compile 
    ant enhance 
    ant createschema 

Das Schema erzeugt wird, aber nicht als die Datanucleus-Dokumentation schlägt vor, dass es mit Vererbungsstrategie sein sollte

Meine Zieldatenbank ist PostgreSQL 8.4 läuft auf Ubuntu 10.04, wenn das wichtig ist.

Sonst noch jemand in dieses Problem hineingelaufen und eine Lösung gefunden?

Antwort

0

meine eigene Frage zu beantworten:

Im Datanucleus tutorial herunterladen, da die build.xml-Datei eine "createschema" target wie hat:

<target name="createschema"> 
    ... 

    <schematool ...> 
     <fileset dir="${basedir}/target/classes"> 
      <include name="**/*.class"/> 
     </fileset> 
     ... 
    </schematool> 
</target> 

Es sollte geändert werden, um alle zu umfassen .jdo Dateien wie unten dargestellt:

benötigt
<target name="createschema"> 
    ... 

    <schematool ...> 
     <fileset dir="${basedir}/target/classes"> 
      <include name="**/*.class"/> 
      <include name="**/*.jdo"/> 
     </fileset> 
     ... 
    </schematool> 
</target> 

Neben der Paket-hsql.orm Datei zu verpacken-hsql.jdo und seine Header geändert werden umbenannt werden muss:

<?xml version="1.0"?> 
<!DOCTYPE jdo PUBLIC 
    "-//Sun Microsystems, Inc.//DTD Java Data Objects ORM Metadata 2.0//EN" 
    "http://java.sun.com/dtd/orm_2_0.dtd"> 
<jdo> 
    ... 
<jdo> 

Beachten Sie, dass das DOCTYPE- und das Root-Element geändert wurden. Das Wurzelelement war "orm" und wurde in "jdo" geändert.

Sobald ich diese Änderungen vorgenommen habe, folgte das Schema-Generierungstool der Direktive "Vererbungsstrategie".

+0

Nichts muss geändert werden. Ich benutze die aktuelle Version (2.2) mit Ant und alles funktioniert. Ihre Situation ist symptomatisch für jemanden, der die mitgelieferte Datei build.xml nicht verwendet und folglich keine ORM-Dateien in Ihrem CLASSPATH hat. – DataNucleus

+0

Okay, ich werde die Version 2.2 ausprobieren. Die oben genannten Probleme waren von der 2.1-Version. – Marek

0

Für meine benutzerdefinierte Anwendung hatte ich ein ähnliches Problem, und es funktionierte gut, nachdem Sie die Änderungen in der Kopfzeile der Jdo-Datei vorgenommen. Ich benutze Version 3.2.9.