2010-08-18 10 views
15

Ich habe 4 persistente Klassen, die alle die gleichen Felder (genau) haben, der einzige 3 Unterschied zwischen ihnen ist 1) der Klassenname, 2) der Tabellenname und 3) die Daten. Ich bin mir bewusst, dass dies einigen seltsam erscheinen mag, aber vertrauen Sie mir, dass es einen guten Grund gibt, auf den ich hier nicht eingehen werde.javax.persistenz Anmerkungen und Vererbung

jetzt, ich bin mit Annotationen überwintern zu meiner Klasse zu konfigurieren, die wie so funktionieren sollen:

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

.. und dies funktioniert, für eine einzige Stand-alone-Klasse, aber es gibt viele Felder Karte und ich möchte sie alle in ein Hit für alle vier ähnliche Klassen tun, das heißt:

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 
{} 

jedoch, wenn diese versuchen, erhalte ich die folgende Ausnahme:

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) 

Ich vermute, das ist, weil die Super-Klasse nicht nach der Kennung gesucht wird?

Gibt es eine Möglichkeit, Vererbung in diesem Kontext zu verwenden?

danke, paul.

+1

geänderte Tags. Es geht nicht um Hibernate-Annotationen, es geht darum, dass jpa Hibernate verwendet –

Antwort

27
@MappedSuperclass 
public class StoreBase 

Weitere Informationen finden Sie unter docs.