2010-04-23 17 views
10

Me interesa saber cómo hibernate.hbm2ddl.auto = validate realmente funciona y me cuesta encontrar una documentación exhaustiva.Hibernate - hibernate.hbm2ddl.auto = validar

Recientemente descubrimos que el sistema de producción se vio afectado por http://opensource.atlassian.com/projects/hibernate/browse/HHH-3532 (Hibernate hace coincidir las claves externas con el nombre, en lugar de la firma, por lo que las volverá a crear) e hibernate.hbm2ddl.auto = update se eliminará de nuestra próxima versión.

Estaría encantado de deshacerme de hibernate.hbm2ddl.auto por completo y gestionar nuestra base de datos nosotros mismos. Sin embargo, no todos mis colegas comparten esta visión del mundo y algunos están dispuestos a volver a agregar en hibernate.hbm2ddl.auto = validate.

Me preocupa que esto afecte el mismo problema y me interesa encontrar más documentación sobre cómo funciona esta validación. La documentación de la comunidad de Hibernate (http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html) realmente solo hace referencia a los valores.

¿Alguien tiene buenos punteros de documentación, o alguna experiencia de uso de validar en un sistema de producción?

Respuesta

17

Me preocupa que esto afecte el mismo problema y me interesa encontrar más documentación sobre cómo funciona esta validación.

En mi opinión, la mejor documentación es el código fuente que puede verificar para ver exactamente qué está sucediendo. El método relevante es org.hibernate.tool.hbm2ddl.SchemaValidator#validate().

Fui rápidamente a través del código y que no creo que la SchemaValidator verifica las claves externas en la base de datos: se comprueba la presencia de tablas, columnas, generadores de claves de identificación, pero no extranjeros. Una prueba en una base de datos de mascotas parece confirmar este comportamiento: eliminar una restricción FK no rompe la validación del esquema (en otras palabras, el validador verifica si la aplicación puede ejecutarse, no para la integridad referencial).

Ahora, HHH-3532 está marcado como fijo, ¿por qué no actualizar a una versión más reciente de hibernación o, si se cambia la versión de Hibernate es demasiado pesado, ¿por qué no se aplica el parche para HHH-3532 ti mismo?

Dicho todo esto, I no use hibernate.hbm2ddl.auto=update para actualizar las bases de datos de producción, utilizo las secuencias de comandos de cambio. Pero I usa hibernate.hbm2ddl.auto=validate y estoy contento con eso.

+0

Gracias Pascal. No estoy a cargo de los sistemas de producción y, ¡no estoy seguro de que se hagan pruebas de regresión lo suficiente como para hacerme feliz con el cambio de versiones! Revisando el historial de control de cambios el otro día noté que originalmente se había configurado como validar y que alguien lo había actualizado para 'udpate'. Teniendo en cuenta eso, creo que es más seguro eliminarlo; es de esperar que alguien tenga menos probabilidades de agregar una línea completa que modificar un valor en el futuro. – azp74