0

私はJDO用のDatanucleusチュートリアルアプリケーション、特にこれを使用しています。

どの「継承戦略」でも、テーブルのレイアウトは同じです。PRODUCT用とBOOK用の2つのテーブルが必要ですが、以下の構成を使用すると、Productクラスと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のドキュメントで、継承戦略「compete-table」を使用する必要があることが示されているため、生成されません。

私のターゲットデータベースは、Ubuntu10.04で実行されているPostgreSQL8.4です。

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

4

2 に答える 2

0

私自身の質問に答えるには:

datanucleus チュートリアルのダウンロードでは、指定された build.xml ファイルに次のような「createschema」ターゲットがあります。

<target name="createschema">
    ...

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

以下に示すように、すべての .jdo ファイルを含めるように変更する必要があります。

<target name="createschema">
    ...

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

さらに、package-hsql.orm ファイルの名前を package-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」に変更されました。

これらの変更を行うと、スキーマ生成ツールは「継承戦略」ディレクティブに従いました。

于 2010-11-25T01:53:29.647 に答える