Pregunta

Después de leer Hibernate: hbm2ddl.auto = ¿actualización en producción? surgieron algunas preguntas . En primer lugar, la razón por la que estoy usando Hibernate es para ser independiente del proveedor de la base de datos (no es necesario escribir 10 versiones de la consulta sql '' same '', por ejemplo, tsql vs. sql).

Mi problema aparece cuando es hora de crear los esquemas de la base de datos (entorno de producción). Hasta donde puedo ver, tengo dos alternativas.

  1. hbm2dll = actualizar
  2. scripts de sql puro (ddl).

La primera alternativa se discute ampliamente en el hilo anterior. La segunda alternativa es mala porque eso significa que he vuelto a mi primer problema: "No quiero crear sentencias sql que dependan del proveedor de la base de datos". (Esta declaración podría ser falsa si " all " (por último, el soporte de Hibernate de bases de datos) está implementando el DDL (el subconjunto de SQL utilizado para definir y examinar la estructura de una base de datos.) igual).

¿Fue útil?

Solución

Realice todos los cambios en el modo de desarrollo / preparación y transfiera y ejecute scripts en producción de forma manual (o automática, pero no permita que Hibernate los ejecute). Es posible que los scripts necesiten algún ajuste, ya que la actualización hbm2ddl no cubre todos los casos.

De hecho, nunca dejo que hibernate ejecute ddl en ninguna base de datos. Yo uso hbm2ddl para generar texto:

org.hibernate.tool.hbm2ddl.SchemaExport --config=hibernate.cfg.xml --text --format --delimiter=;

org.hibernate.tool.hbm2ddl.SchemaUpdate --config=hibernate.cfg.xml --text --format --delimiter=;

Otros consejos

Normalmente, las herramientas que vuelcan el esquema JPA se basan en la herramienta SchemaExport , que lee solo los metadatos estáticos.

Hay un complemento Maven / Gradle https://github.com/Devskiller/jpa2ddl que genera el esquema JPA. Incluye todas las propiedades, estrategias de nombres, tipos de usuario, etc.

También puede usarlo para generar migraciones de esquemas automatizadas para Flyway .

Me gusta Hibernate (MUCHO), y creo que crea un código de calidad increíblemente bueno, pero en cuanto lo suelte en una base de datos de producción, dejaría que un niñero oso pardo muy bien educado. Todo puede ir bien por un tiempo, pero el único incidente en el que sale mal es REALMENTE mal.

Mi sugerencia sería en un entorno de prueba, hibernar generar esquemas de base de datos. Prueba aquellos en un entorno de prueba. Luego lleve esos scripts al entorno de producción y ejecútelos. Tenga en cuenta la especificidad allí; incluso si las pruebas tienen un éxito fantástico, TODAVÍA no permitiría que Hibernate se vuelva loco en el servidor de producción. Tome el resultado del esquema de Hibernate, pruébelo y, una vez validado, impleméntelo en el servidor de producción.

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