Pregunta

Al implementar aplicaciones, suelo utilizar la capacidad de Hibernate para crear un esquema de base de datos con el fin de simplificar la implementación.Esto se puede lograr fácilmente configurando la propiedad hibernate.hbm2ddl.auto.

Sin embargo, en ocasiones también necesito insertar algunos datos iniciales en la base de datos, por ejemplo, el usuario root.¿Hay alguna manera de lograr esto mediante hibernación con algún tipo de carga de archivo de texto?

Sé que podría programar fácilmente el código que lo hará, pero me pregunto si ya existe alguna utilidad que pueda ayudarme a lograr lo mismo a través de la configuración.

¿Fue útil?

Solución

He encontrado esto haciendo una búsqueda en "accesorios" de Hibernate:

  

Hibernate crear la base de datos   cuando la fábrica gestor de la entidad es   creado (en realidad cuando Hibernate   SessionFactory es creado por el   entidad fábrica manager). Si un archivo   Existe llamado import.sql en la raíz de   la ruta de clase ( '/import.sql')   Hibernate ejecutar el SQL   declaraciones leen desde el archivo después de   la creación del esquema de base de datos.   Es importante recordar que   antes de hibernación se crea el esquema   la vacía (borrar todas las tablas,   restricciones, o cualquier otra base de datos   objeto que va a ser creado en   el proceso de construcción del esquema).

Fuente: http: //www.velocityreviews. com / foros / t667849-hibernate-quotfixturesquot-o-base-population.html

Darle una oportunidad y háganos saber si funciona!

Otros consejos

Adición import.sql a la ruta de clase funciona muy bien cheques, hbm2ddl si existe el archivo y lo ejecuta. El único detalle adicional es que cada comando SQL debe estar en su propia línea, de lo contrario no será capaz de ejecutar.

Esto también funciona sólo si se ajusta a hbm2ddl.auto create o create-drop.

Añadir propiedad de hibernación hibernate.hbm2ddl. import_files en su configuración de hibernación. Cambiar hibernate.hbm2ddl.auto propiedad para crear. Añadir initial_data.sql en el directorio / clases con el código SQL para insertar datos inicial. Hibernate ejecutar esto después de crear el esquema de base de datos.

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
            <prop key="hibernate.hbm2ddl.import_files">initial_data.sql</prop>
        </props>
    </property>
</bean>

Si no desea añadir una propiedad en su configuración de hibernación puede crear un archivo en el directorio import.sql / clases e hibernación uso esto por defecto si hibernate.hbm2ddl.auto propiedad es igual para crear

Por qué hbm2ddl.auto y hbm2ddl.import_files las propiedades son demonio

(Cuando se utiliza incorrectamente como herramienta para la gestión de cambios de bases de datos)

como dije en otra parte, usando hibernate.hbm2ddl.auto y hibernate.hbm2ddl.import_files para la gestión de cambios de bases de datos tiene algunos grave desventajas:

  1. Sólo se puede cambiar la estructura.Los valores existentes pueden sobrescribirse o, en el peor de los casos, simplemente enviarse a Nirvana.Sin una herramienta como liquibase o scriptella, No tienes ninguno ETL capacidades.
  2. Este método no tiene transacciones.Tanto la estructura como las declaraciones de datos se ejecutarán antes de que un administrador de transacciones asuma el control.Digamos que tiene un error en el enunciado 42 de 256.Su base de datos ahora se encuentra en un estado inconsistente.
  3. En mi opinión, pierdes transparencia y control:donde un script scriptella o un cambio de liquibase se establecen o generalmente se confirman junto con los cambios en los modelos de dominio, se realiza un cambio en el modelo de dominio y se espera (básicamente) que hibernación descubra qué hacer.(No es así, pero esa es una historia diferente).
  4. Para la integración, el sistema y la prueba de aceptación, simplemente asumir que sus bases de datos de prueba estén en el absolutamente, exactamente el mismo estado como su base de datos de producción.Tienes que realizar un seguimiento de eso manualmente (¡Buena suerte y diviértete!;) ).En caso de cometer un error, basta con un pequeño desliz, los resultados pueden ser muy catastróficos.

Yo personalmente uso liquibase para la gestión de cambios de bases de datos y he desarrollado el siguiente flujo de trabajo para reducir el trabajo de mantenimiento:

Incluso para cambios complicados en los que hay que implementar una personalizadoCambiar, esto se puede lograr en cuestión de horas, incluida la definición de reversiones, pruebas y documentación.Para cambios triviales, es cuestión de minutos.Básicamente:tienes que trabajar un poco más (he creado conjuntos de cambios personalizados para 4 configuraciones de bases de datos en menos de un día), pero tienes la tranquilidad de haber hecho todo lo posible para mantener la base de datos en un estado consistente.

Después de un par de horas de tropiezo con esto, decidí compartir lo que he encontrado, aunque es un post muy antigua.

Para hacer que funcione correctamente, lo que tenía que hacer lo siguiente:

  • hbmddl set a create o create-drop
  • file.sql en la raíz de la ruta de clases; en mi caso, acabo de poner en resources carpeta, estoy usando experto.
  • cada comando SQL en una línea
  • cada file.sql debe tener una línea en blanco al beggining del archivo ==> no saber la razón de esto, pero si no lo introduzca esa línea en blanco, por lo el tiempo de ejecución de los servidores me dice que hay un error de sintaxis cerca del primer carácter.

Espero que ayude.

Por favor asegúrese de que su import.sql tiene el formato correcto. Comience con una instrucción de inserción de un revestimiento a prueba.

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