Tengo una aplicación que usa Hibernate para la persistencia de datos, con Spring en la parte superior (para una buena medida). Hasta hace poco, había una clase persistente en la aplicación, A:¿Es una mala práctica usar DiscriminatorFormula para migrar las bases de datos de Hibernate?
@Entity
public class A {
@Id
@Column(unique = true, nullable = false, updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
public String name;
}
Desde entonces he añadido una subclase de A, llamado B:
@Entity
public class B extends A {
public String description;
}
Después de la adición de B, ahora podría no cargar una de . La siguiente excepción fue arrojado:
class org.springframework.orm.hibernate3.HibernateObjectRetrievalFailureException :: Object with id: 1 was not of the specified subclass: A (Discriminator: null); nested exception is org.hibernate.WrongClassException: Object with id: 1 was not of the specified subclass: A (Discriminator: null)
que añade la siguiente anotación y la propiedad de B, y parece haber resuelto el problema. ¿Es esta la manera correcta de resolver el problema?
...
@DiscriminatorFormula("(CASE WHEN dtype IS NULL THEN 'A' ELSE dtype END)")
public class A {
private String dtype = this.getClass().getSimpleName();
...
gracias por la respuesta detallada. Lamentablemente, no tendré acceso directo a todas las instalaciones de la aplicación, por lo que me gustaría que este cambio de esquema se realice de forma transparente a los usuarios. Intenté agregar DiscriminatorFormula sin definir explícitamente el campo dtype, pero esto no funcionó. Se sentía como un truco cuando lo estaba haciendo - es por eso que pregunté. – Armand
@Alison De nada. Te di lo que es IMO la solución "ideal". Si no es adecuado en su contexto, si no puede proporcionar una secuencia de comandos de migración a sus usuarios (que realizaría el 'ACTUALIZACIÓN' después de varios 'ALTER') - o incluso mejor una herramienta de migración automatizada - entonces su solución es aceptable. Al menos funciona Y ahora sabes que es un hack :) –
-) He encontrado información sobre migraciones en Hibernate/Spring bastante difícil de conseguir, desafortunadamente. – Armand