tengo una clase genérica que es también un super clase asignada que tiene un campo privado que mantiene un puntero a otro objeto del mismo tipo:Cómo manejar las anotaciones JPA para un puntero a una interfaz genérica
@MappedSuperclass
public abstract class MyClass<T extends MyIfc<T>>
implements MyIfc<T>
{
@OneToOne()
@JoinColumn(name = "previous", nullable = true)
private T previous;
...
}
Mi problema es que Eclipse está mostrando un error en el archivo en la "entidad de destino" T de OneToOne porque "anterior no es una entidad". Todas las implementaciones de MyIfc son, de hecho, Entidades. También debo agregar que cada implementación concreta que hereda de MyClass usa un valor diferente para T (porque T es ella misma), así que no puedo usar el atributo "targetEntity".
Supongo que si no hay respuesta, tendré que mover esta anotación JPA a todas las subclases concretas de MyClass. Simplemente parece como que JPA/Hibernate debería ser lo suficientemente inteligente como para saber que todo funcionará en tiempo de ejecución. Me hace preguntar si debería ignorar este error de alguna manera.
Gracias por lo que confirma que esto es imposible. Otra razón más por la que la herencia de implementación nunca funciona de la manera que desea. Eliminaré todas las referencias a tipos genéricos de la superclase abstracta y los duplicaré en todas las implementaciones concretas. Me pregunto si hubiera sido mejor usar archivos de mapas XML en lugar de anotaciones. – HDave
@HDave No * creo * que esto cambiaría nada, espero que su proveedor de JPA se queje en el tiempo de ejecución. –
Incluso si no lo hiciera, supongo que las relaciones entre entidades de tipo seguro y tipo compilación valen la tranquilidad.¡Apesta que tengo que pasar hoy copiando este fragmento de código en 17 implementaciones de entidades concretas! – HDave