2010-08-18 9 views
15

Tengo 4 clases persistentes que tienen todos los mismos campos (exactamente) las únicas 3 diferencias entre ellas son 1) el nombre de la clase, 2) el nombre de la tabla y 3) los datos. Soy consciente de que esto puede parecer extraño para algunos, pero créanme que hay una buena razón por la que no entraré aquí.anotaciones y herencia de javax.persistence

ahora, estoy usando Hibernate anotaciones para configurar mi clase que deben trabajar de esta manera:

@Entity 
@Table(name = "store") 
public class Store 
{ 
@Id 
@Column(name = "unique_id") 
protected String id; 
@Column 
protected String category; 
... 
} 

.. y esto funciona, por una sola clase independiente, sin embargo hay muchos campos a el mapa y me gustaría hacerlo todo de un solo golpe para las cuatro clases similares, es decir:

public class StoreBase 
{ 
@Id 
@Column(name = "unique_id") 
protected String id; 
@Column 
protected String category; 
... 
} 

@Entity 
@Table(name = "store1") 
public class Store1 extends StoreBase 
{} 

@Entity 
@Table(name = "store2") 
public class Store2 extends StoreBase 
{} 

@Entity 
@Table(name = "store3") 
public class Store3 extends StoreBase 
{} 

@Entity 
@Table(name = "store4") 
public class Store4 extends StoreBase 
{} 
embargo

al intentar este me da la siguiente excepción:

Caused by: org.hibernate.AnnotationException: No identifier specified for entity: package.entities.Store1 
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:672) 
at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:546) 
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:291) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292) 
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) 

Supongo que esto se debe a que no se está buscando el identificador en la superclase.

¿Existe alguna forma de utilizar la herencia en este contexto?

gracias, paul.

+1

cambiaron las etiquetas. esto no se trata de anotaciones de hibernación, se trata de jpa usando hibernación –

Respuesta

27
@MappedSuperclass 
public class StoreBase 

Ver docs para obtener más información.