2009-05-07 27 views
5

Después de leer Hibernate: hbm2ddl.auto=update in production? surgieron algunas preguntas. En primer lugar, la razón por la que estoy usando Hibernate es ser independiente del proveedor de bases de datos (no es necesario escribir 10 versiones de la "misma" consulta sql, por ejemplo, tsql vs. sql).Cómo crear una base de datos Esquema usando Hibernate

Mi problema aparece cuando es el momento de crear los esquemas de la base de datos (entorno de producción). Por lo que puedo ver, tengo dos alternativas.

  1. hbm2dll = actualización
  2. pura SQL (DDL) guiones.

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 dependientes del proveedor de la base de datos". (Esta declaración podría ser falsa si "todos" (al menos las bases de datos admiten Hibernate) están implementando el DDL (El subconjunto de SQL utilizado para definir y examinar la estructura de una base de datos) igual).

Respuesta

5

¿Todos los cambios en el desarrollo/modo de parada o de transbordo y ejecutar secuencias de comandos en la producción manualmente (o automáticamente, pero no dejan de hibernación ejecutarlas). Es posible que las secuencias de comandos necesiten algunos ajustes, ya que la actualización de hbm2ddl no cubre todos los casos.

De hecho, nunca dejé hibernate ejecutar ddl contra 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=; 
+0

pásame al golpe. Totalmente de acuerdo. –

1

me gusta Hibernate (mucho), y yo creo que tiene algo de código muy buena calidad, pero tan pronto como lo convertiría suelta en una base de datos de producción de lo que dejaría un niñito oso muy bien educado. Todo puede ir bien por un tiempo, pero el único incidente en el que falla es REALMENTE malo.

Mi sugerencia sería en un entorno de prueba, he hibernate generate database schemas. Pon a 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 solo 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.

+1

No intento ser adversario aquí, pero ¿leyó mi pregunta? – Schildmeijer

+0

Lo hice; ¿Hay alguna manera específica en que mi respuesta indique una incomprensión de tu pregunta? –

+0

La primera oración de tu respuesta. – Schildmeijer

3

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

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

También puede usarlo para generar migraciones de esquema automáticas para Flyway.

Cuestiones relacionadas