2010-11-25 6 views
0

私はJDOのDatanucleusチュートリアルアプリケーションspecifically this oneを使って作業しています。Datanucleusスキーマ生成で "継承戦略="指示が無視される

どのような "継承戦略"私はテーブルのレイアウトを試しても同じです。 PRODUCTとBOOKの2つのテーブルが必要ですが、以下の設定を使用すると、ProductクラスとClass Bookクラスの両方の列を持つPRODUCTテーブルしか取得できません。

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

ディレクトリ構造は、build.xmlと同様にチュートリアルとまったく同じです。私は、Antタスクとコマンドラインの両方でスキーマを生成しようとしました。

私は一連のコマンドを使用します。スキーマが生成され

ant clean 
    ant compile 
    ant enhance 
    ant createschema 

が、DataNucleusのドキュメントとして、それが継承戦略であることを示唆しているではない「競争・テーブルを。」

私のターゲットデータベースは、Ubuntu 10.04で動作するPostgreSQL 8.4です。

誰かがこの問題に遭遇し、解決策を見つけましたか?

答えて

0

自分の質問に答えるために:すべての.jdoを含むように変更する必要があります

<target name="createschema"> 
    ... 

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

:のような特定のbuild.xmlファイルは、「createschema」ターゲットを持っている、DataNucleusのチュートリアルのダウンロードでは

を以下に示すようにファイル:

<target name="createschema"> 
    ... 

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

またパッケージhsql.ormファイルは、hsql.jdoをパッケージするために名前を変更する必要があり、そのヘッダに変更する必要があります

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

DOCTYPEとルート要素が変更されていることに注意してください。ルート要素は "orm"で、 "jdo"に変更されました。

これらの変更を行うと、スキーマ生成ツールは "継承戦略"指示に従いました。

+0

何も変更する必要はありません。私はAntを使って現在のバージョン(2.2)を実行し、それはすべて動作します。あなたの状況は、提供されたbuild.xmlを使用しなかった人の症状です。その結果、あなたのCLASSPATHにORMファイルがありません。 – DataNucleus

+0

いいえ、私は2.2バージョンを試します。上記の問題は2.1バージョンの試用によるものです。 – Marek

0

私のカスタムアプリケーションでは、私は同様の問題があり、jdoファイルのヘッダーに変更を加えてもうまくいきました。私はバージョン3.2.9を使用しています。

関連する問題