Necesito asignar las enumeraciones que no implementaron la interfaz de antemano a la base de datos existente, que almacena enumeraciones en la misma tabla que la clase propietaria que usa el @Enumerated(EnumType.STRING)
.Hibernate enumeración de enum
class A {
HasName name;
}
interface HasName {
String getName();
}
enum X implements HasName {
John, Mary;
public String getName() { return this.name(); }
}
enum Y implements HasName {
Tom, Ann;
public String getName() { return this.name(); }
}
¿Cómo debe manejarse el mapeo en este caso? Persistir en la base de datos no cambia, ya que todas las enumeraciones que implementan la interfaz tendrán diferentes valores, pero no estoy seguro de cómo se deben recuperar los objetos de la base de datos (¿necesito un asignador personalizado, que intentará crear una instancia de un enum utilizando las clases de enumeración especificadas? ¿Hibernate admite de forma nativa esta funcionalidad?).
En mi caso, yo no sé lo que será la clase de la enumeración. Al crear instancias de 'A', Hibernate deberá elegir una de las enums {X, Y}. – dm3
No debería ser tan difícil ajustar la implementación de UserType de ejemplo a sus necesidades. Por ejemplo, en lugar de almacenar solo el valor, también puede almacenar la clase (por ejemplo, com.example.X.John o X.John, pero de lo que necesitará una asignación de X a com.example.X) – sfussenegger
Significa I necesita un mapeador personalizado (no vio su enlace para pegar). Gracias por la respuesta. – dm3