Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Hibernate - Modificar estructura de tablas

Estas en el tema de Hibernate - Modificar estructura de tablas en el foro de Java en Foros del Web. ¡Hola a todos! He estado estudiando acerca de Hibernate pero me surge una duda general. Imaginemos que yo he creado la clase Persona tal y ...
  #1 (permalink)  
Antiguo 15/01/2016, 15:43
 
Fecha de Ingreso: febrero-2013
Mensajes: 42
Antigüedad: 11 años, 9 meses
Puntos: 0
Pregunta Hibernate - Modificar estructura de tablas

¡Hola a todos!

He estado estudiando acerca de Hibernate pero me surge una duda general.

Imaginemos que yo he creado la clase Persona tal y como la muestro aquí (aunque faltan los constructores, getters, setters,...):

Código:
@Entity
@Table(name="Persona")
public class Persona implements Serializable  {
     @Id
     @Column(name="Id")
     private int id;

     @Column(name="nombre")
     private String nombre;

     @Column(name="edad")
     private int edad;
}

Hibernate es capaz de crear la estructura de la base de datos por mí, así que no tengo que hacer yo a mano los CREATE TABLE... Eso está muy bien, pero me pregunto... una vez que ya está en producción mi proyecto, si yo añado una nueva propiedad a la clase y la compilo, ¿cómo hago para que la base de datos cree el nuevo campo en la tabla?

En el siguiente ejemplo, he añadido la propiedad alias de tipo String.

Código:
@Entity
@Table(name="Persona")
public class Persona implements Serializable  {
     @Id
     @Column(name="Id")
     private int id;

     @Column(name="nombre")
     private String nombre;

     @Column(name="edad")
     private int edad;

     @Column(name="alias")
     private String alias;
}
¿Cómo hago para que Hibernate cree el nuevo campo en la BD?

¡Gracias!

Un saludo.
  #2 (permalink)  
Antiguo 17/01/2016, 10:59
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Hibernate - Modificar estructura de tablas

Hola:

En la configuración de hibernate tienes la propiedad hibernate.hbm2ddl.auto que es la que dice que debe crear las tablas (valor "create"). Tienes más valores posibles, uno de ellos "update", que las crea si hace falta o las modifica si ya existen y es necesario

http://stackoverflow.com/questions/4...d-what-they-do

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 18/01/2016, 05:11
 
Fecha de Ingreso: febrero-2013
Mensajes: 42
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Hibernate - Modificar estructura de tablas

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

En la configuración de hibernate tienes la propiedad hibernate.hbm2ddl.auto que es la que dice que debe crear las tablas (valor "create"). Tienes más valores posibles, uno de ellos "update", que las crea si hace falta o las modifica si ya existen y es necesario

[url]http://stackoverflow.com/questions/438146/hibernate-hbm2ddl-auto-possible-values-and-what-they-do[/url]

Se bueno.
¡Gracias!

Primero cree la estructura de la BD con el parámetro create-drop, y luego, ya en producción, lo establecí como update.

A partir de este punto, si modifico la estructura de la tabla (como he hecho en el ejemplo), el campo de edad de las Personas ya creadas estarían a NULL, pero funcionaría. Supongo que habría que tener en cuenta esto y revisar las celdas NULL para dejarlas en algún valor.

Gracias de nuevo.

Un saludo.
  #4 (permalink)  
Antiguo 18/01/2016, 06:52
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Hibernate - Modificar estructura de tablas

Hola:

create-drop crea y borra al terminar, por lo que cuando arranques la siguiente vez no hay tablas.

update, actualiza si las tablas ya estan creadas y crea desde cero si no lo están. Por lo que solo con update desde el principio debería valerte. Según el cambio que hagas, los datos pueden conservarse o no. Por supuesto, no se va a inventar valores para las nuevas columnas, salvo que haya algún criterio claro para rellenarlas, como valor por defecto o ser autoincrementales, secuencias, etc.

En producción aconsejan no usar esta caracteristica (create, update, etc), sino crear las tablas a mano. Una cosa automática como update puede funcionar bien, pero también puede hacerte algún estropicio en un momento dado.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 19/01/2016, 17:47
 
Fecha de Ingreso: febrero-2013
Mensajes: 42
Antigüedad: 11 años, 9 meses
Puntos: 0
Pregunta Respuesta: Hibernate - Modificar estructura de tablas

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

create-drop crea y borra al terminar, por lo que cuando arranques la siguiente vez no hay tablas.

update, actualiza si las tablas ya estan creadas y crea desde cero si no lo están. Por lo que solo con update desde el principio debería valerte. Según el cambio que hagas, los datos pueden conservarse o no. Por supuesto, no se va a inventar valores para las nuevas columnas, salvo que haya algún criterio claro para rellenarlas, como valor por defecto o ser autoincrementales, secuencias, etc.

En producción aconsejan no usar esta caracteristica (create, update, etc), sino crear las tablas a mano. Una cosa automática como update puede funcionar bien, pero también puede hacerte algún estropicio en un momento dado.

Se bueno.
¡Gracias por tu respuesta!

Hay algunos conceptos que no me quedan muy claros del sistema en producción.

Se supone que las modificaciones de las clases básicas (como Persona, en mi caso) son las que producirían modificaciones en la BD.

Si tengo el sistema J2EE en producción y hago modificaciones de este tipo... ¿cómo debería proceder? ¿Compilo los java y subo los .class? ¿Detengo el servidor de aplicaciones, subo los .class y vuelvo a lanzarlo?
¿Otra manera? Voy algo perdido...

¡Gracias!
  #6 (permalink)  
Antiguo 20/01/2016, 03:31
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Hibernate - Modificar estructura de tablas

Hola:

Depende de lo "serio" que sea tu sistema en producción. No es lo mismo una aplicación que usan un par de usuarios esporádicamente que una aplicación que usan centenares de usuarios de forma continua. También depende de la "gravedad" que tenga un fallo, no es lo mismo que si tu aplicación falla se estrelle un avión que si tu aplicación falla el único efecto es que un usuario no pueda ver alguna información trivial, como el tiempo que va a hacer el fin de semana para saber si se va de viaje o se queda en casa.

Si son pocos y esporádicos, posiblemente te baste con redesplegar en caliente tu aplicación y hacer el update con hibernate de forma automática.

Si es una aplicación seria, es mejor mandar el aviso de que entra en mantenimiento con tiempo suficiente a todos los usuarios, parar el servidor, cambiar la base de datos con algún script específico hecho al efecto que asegure que todo va bien, cambiar tu aplicación y volver a levantar el servidor.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Etiquetas: estructura, hibernate
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:43.