Pregunta

Puedo usar Hibernate para generar mi base de datos de forma automática para las pruebas, y tengo algunas tablas en mi esquema que contienen datos estáticos que toma mucho tiempo para importación. En el pasado, he utilizado el código siguiente en mi fichero de construcción para generar la base de datos (a partir de archivos de asignación):

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

Los archivos .hbm.xml se generaron utilizando XDoclet. Estoy migrando a la utilización de anotaciones de Hibernate para la cartografía, así que me estoy mudando a hibernatetools para generar el esquema:

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

Me gustaría ser capaz de decir hbm2ddl a dejar de lado las clases del paquete "inerte", tal como solía hacerlo con SchemaExport. conozco a nadie si hay una manera de hacerlo?

¿Fue útil?

Solución 2

La solución que dudé a ir con fue la creación de una configuración de Hibernate independiente con exactamente las clases que quería mapa, y el uso que para la tarea de exportación en lugar de la otra configuración de Hibernate con todas las clases asignadas.

Otros consejos

Esto debería funcionar:

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

¿ha probado el actualización atributo en la etiqueta hbmddl ?

<hbm2ddl update="true" ...

aquí para los detalles

que debería funcionar

Si usted tiene esta situación y le sucede no querer Hibernate para actualizar el datos en las tablas, ya sea, a continuación, se puede reemplazar:

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

con

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

A continuación, la herramienta de exportación de esquemas lo ignorará, pero también lo serán las escrituras. Al menos, eso es lo que sugiere la documentación.

  

subselección (opcional): asigna una entidad inmutable y de sólo lectura a una   subselección base de datos.

Esto lo descubrí mirando a través de la función Table.isPhysicalTable. También podría ver en el uso AbstractUnionTables, que son la otra excepción.

Me sucede a querer objetos inmutables.

Mi caso de uso es que quiero cargar ediciones inmutables en forma ligeramente diferente de algunos objetos de hibernación administrado sin riesgo de cambiar accidentalmente la exportación de esquemas. Así subselección está muy bien adaptado a eso.

Por desgracia lo hará la basura todas sus consultas con que subselección, que la base de datos debe será capaz de optimizar la basura, pero las personas tienen diferentes cantidades de confianza en la optimización de la base de datos con buena razón.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top