Генерация схемы Datanucleus игнорирует директиву «стратегия наследования =» - PullRequest
0 голосов
/ 25 ноября 2010

Я работаю с учебным приложением Datanucleus для JDO, , в частности, с этим .

Независимо от того, какая "стратегия наследования" я пробую, макет таблицы один и тот же.Я хотел бы две таблицы, одну для PRODUCT и одну для BOOK, но используя приведенную ниже конфигурацию, я получаю только таблицу PRODUCT со столбцами как для класса Product, так и для класса Book.

   <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.это должно быть со стратегией наследования "таблица конкуренции".

Моя целевая база данных - это PostgreSQL 8.4, работающая на Ubuntu 10.04, если это имеет значение.

Кто-нибудь еще сталкивался с этой проблемой и нашел решение?

Ответы [ 2 ]

0 голосов
/ 06 января 2014

Для моего пользовательского приложения у меня была похожая проблема, и она работала нормально после внесения изменений в заголовок файла jdo. Я использую версию 3.2.9.

0 голосов
/ 25 ноября 2010

Чтобы ответить на мой собственный вопрос:

При загрузке учебника datanucleus данный файл build.xml имеет цель «createchema», например:

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

После внесения этих изменений инструмент генерации схемы следовал директиве «стратегия наследования».

...