2017-10-26 6 views
0

Ich muss mit JPA-3-Ebene Erbe haben (aber nur eine Datentabelle CELLAR_PER) Hier sind meine EntitiesSchema-Validierung: fehlende Tabelle mit JPA Multi-Level-Vererbung

@MappedSuperclass 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class PersistEntity implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name = "ID", nullable = false) 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 

    ... 
} 

Die zweite Ebene

@MappedSuperclass 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class PersistEntityPer extends PersistEntity { 
    private static final long serialVersionUID = 1L; 

    @Temporal(TemporalType.DATE) 
    @Column(
     name = "PERIOD_START", 
     nullable = false) 
    private Date periodStart; 

    @Temporal(TemporalType.DATE) 
    @Column(
     name = "PERIOD_END", 
     nullable = false) 
    private Date periodEnd; 
} 

Und die letzte Stufe

@Entity 
@Table(name = "dbo.CELLAR_PER") 
public class CellarPer extends PersistEntityPer { 

    private static final long serialVersionUID = 1L; 

    @ManyToOne 
    @JoinColumn(
     name = "CELLAR_CASE_ID", 
     nullable = false) 
    private CellarCase cellarCase; 
} 

Mein Problem ist, dass ich th bekommen ist ein Fehler bei der Ausführung meines Tomcat-Servers:

Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [dbo.CELLAR_PER] 
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.validateTable(AbstractSchemaValidator.java:121) 
    at org.hibernate.tool.schema.internal.GroupedSchemaValidatorImpl.validateTables(GroupedSchemaValidatorImpl.java:42) 
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.performValidation(AbstractSchemaValidator.java:89) 
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.doValidation(AbstractSchemaValidator.java:68) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:191) 
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:309) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:452) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:889) 
    ... 48 common frames omitted 

Bitte, könnten Sie mir helfen, diesen Fehler zu beheben?

+0

Die Idee mit SINGLE_TABLE ist, dass die Wurzelklasse der Tabelle definiert, und die Unterklassen sind beharren in sie (auch Sie die Vererbung in der ROOT-Klasse nur definieren). Sie scheinen die Tabelle in einer Unterklasse zu definieren, die nicht funktioniert. Sehen Sie sich einmal an, was Ihr JPA-Provider mit TABLES erstellt hat? aka Debuggen – DN1

+0

JPA erstellt die folgende Tabelle, die von entsprechenden, was ich will => 'code' Tabelle dbo.CELLAR_PER ( ID int Identität nicht null, VERSION int not null, PERIOD_START Datum nicht null, PERIOD_END Datum nicht null erstellen , CELLAR_CASE_ID int nicht null, Primärschlüssel (ID) ); 'code' – fipro28

+0

ist das dbo Schemaname oder Tabellenname? – Ponni

Antwort

0

Sie haben Recht. Hier ist die Lösung:

In meiner Entitätsdeklaration hatte ich dies:

@Table(name = "dbo.CELLAR_PER") 

Und ich entfernt nur die dbo. aus der Erklärung. Die Lösung lautet:

@Table(name = "CELLAR_PER") 
-1

Richtig, ich verlor Zeit nur wegen der "dbo." Das war nur das ... Danke für Ihre Hilfe

+1

Es ist in Ordnung, Ihre eigene Frage zu beantworten, aber wenn Sie eine Antwort geben, geben Sie eine tatsächliche Antwort an (das erklärt, was das Problem war und wie es behoben werden kann). Was du gepostet hast, ist ein Kommentar. –