Есть ли способ получить задачу HBM2DD HBM2DL HIBERNATE, чтобы исключить определенные таблицы?

StackOverflow https://stackoverflow.com/questions/2140709

Вопрос

Я использую Hibernate для автоматического генерации базы данных для тестирования, и у меня есть несколько таблиц в моей схеме, которые содержат статические данные, которые требуют очень много времени для импорта. В прошлом я использовал следующий код в моем файле сборки для генерации базы данных (из отображения файлов):

<target name="schema-gen" depends="hibernate-gen">
    <taskdef name="schemaexport" classname="org.hibernate.tool.hbm2ddl.SchemaExportTask" classpathref="project.classpath" />

    <schemaexport properties="resources/hibernate.properties" text="false" quiet="false" delimiter=";" output="schema.sql">
        <fileset dir="${build.doclets}">
            <include name="**/*.hbm.xml" />
            <exclude name="**/inert/*.hbm.xml" />
        </fileset>
    </schemaexport>
</target>

Файлы .hbm.xml были сгенерированы с использованием Xdoclet. Я перехожу к использованию аннотаций Hibernate для картирования, поэтому я переезжаю в Hibernatetools, чтобы создать схему:

<target name="annotations-export" depends="hibernate-gen">
    <hibernatetool destdir="${basedir}">
        <annotationconfiguration configurationfile="${basedir}/resources/hibernate.cfg.xml" propertyfile="${basedir}/resources/hibernate.properties" />
        <classpath>
            <path refid="project.classpath" />
        </classpath>
        <hbm2ddl drop="true" create="true" export="true" outputfilename="schema.sql" delimiter=";" format="true" />
    </hibernatetool>
</target>

Я хотел бы иметь возможность сказать HBM2DDL оставлять классы в пакете «Инертный», как я раньше с SchemeAxport. Кто -нибудь знает, есть ли способ сделать это?

Это было полезно?

Решение 2

Решением, с которым я поступил, было создание отдельной конфигурации Hibernate с точно таковыми классами, которые я хотел отобразить, и использование ее для экспортной задачи вместо другой конфигурации Hibernate со всеми сопоставленными классами.

Другие советы

Это должно работать:

<target name="annotations-export" depends="hibernate-gen">
    <hibernatetool destdir="${basedir}">
        <annotationconfiguration configurationfile="${basedir}/resources/hibernate.cfg.xml" propertyfile="${basedir}/resources/hibernate.properties">
            <fileset dir="${build.doclets}">
                <include name="**/*.class" />
                <exclude name="**/inert/*.class" />
            </fileset>
        </annotationconfiguration>
        <classpath>
            <path refid="project.classpath" />
        </classpath>
        <hbm2ddl drop="true" create="true" export="true" outputfilename="schema.sql" delimiter=";" format="true" />
    </hibernatetool>
</target>

Вы пробовали Обновить атрибут на HBMDDL ярлык?

<hbm2ddl update="true" ...

видеть здесь для деталей

это должно работать

Если у вас есть эта ситуация, и вы не хотите, чтобы Hibernate обновил данные В таблицах тоже вы можете заменить:

<class name="FooClass" table="FOO_TABLE"></class>

с

<class name="Foo" subselect="select * from FOO_TABLE">
  <synchronize table="FOO_TABLE">
</class>

Тогда инструмент экспорта схемы будет игнорировать его, но и какие -либо записывают. По крайней мере, это то, что предлагает документация.

Subseceect (необязательно): отображает неизменную и только чтение сущности в подбол базы данных.

Я обнаружил это, глядя на Table.isPhysicalTable функция Вы также можете использовать AbstractUniontables, которые являются другим исключением.

Я случайно хочу неизменных объектов.

Мой пример использования заключается в том, что я хочу загрузить немного по -разному в форме неподвижных изданий некоторых управляемых объектов Hibernate без риска случайного изменения экспорта схемы. Таким образом, Subsect довольно хорошо подходит для этого.

К сожалению, это засоряет все ваши запросы с этим подэлектом, который база данных должен Уметь оптимизировать его, но люди имеют различные объемы доверия к оптимизации базы данных по уважительной причине.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top