2011-04-25 17 views
5

Tenemos una @MappedSuperclass class Entity que define el identificador predeterminado y el generador:Cómo anular @GeneratedValue declarado en superclase mapeada?

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Override 
public K getId() { 
    return id; 
} 

quiero no utilizar cualquier generador en la subclase Foo en absoluto, porque voy a proporcionar la clave principal a mí mismo.

Debo extender Foo desde la clase base Entity, porque muchas y muchas funciones dependen de esta clase base. La anotación @AttributeOverrides parece no ser compatible con anular @GeneratedValue.

+0

posible duplicado de [¿Cómo anulo la estrategia GenerationType utilizando anotaciones de Hibernate/JPA?] (Http://stackoverflow.com/questions/328202/how-do-i-override-the-generationtype-strategy-using- hibernate-jpa-annotations) –

Respuesta

0

Me parece que Foo no es en realidad un subtipo de Entity y nunca debería haberlo extendido realmente. La herencia es un contrato fuerte. No extendería algo solo para acceder a algunos métodos.

En hibernación cuando obtiene un objeto Foo de la base de datos, también está seleccionando en la tabla Entidad. Ambas tablas se unen a través de su campo @Id, verá que el Id en el Foo será el mismo que el Id en Entity.

Esto nos permite hacer lo siguiente.

Entity entity = new Foo(); 
if (entity instanceof Foo) { 
    //we have a Foo object 
} else if(entity instanceof ...) { 
    //we have a ... 
} 

Si desea suministrar su propia Id. No debe extender la superclase. Si tiene una gran cantidad de lógica que desea incluir en varias clases de hibernación, pero en realidad no son subtipos de la clase, considere usar @Embedded.

+0

Creo que Xie ha mencionado que su clase base es una superclase mapeada y no una entidad, por lo que su superclase mapeada no se mapeará en una tabla y, por lo tanto, el problema de la unión no llegaría. El uso de métodos abstractos para id en la clase base y la anotación de los métodos getter en la clase derivada parece ser el camino. – Shailendra

Cuestiones relacionadas