2010-12-06 11 views
2

ich die folgenden Ausnahme mit Hibernate bekommen:„Tabelle nicht gefunden“ Ausnahme mit Hibernate

10:18:14,795 INFO [SchemaValidator] Running schema validator 

10:18:14,795 INFO [SchemaValidator] fetching database metadata 

10:18:16,958 INFO [DatabaseMetadata] table not found: DUMMY_TABLE 

10:18:16,963 ERROR [AbstractKernelController] Error installing to Start: name=persistence.unit:unitName=bkoMdw-ear.ear/bkoMdw-ejb.jar#bkoMdw state=Create 
javax.persistence.PersistenceException: [PersistenceUnit: bkoMdw] Unable to build EntityManagerFactory 

(...) 

Caused by: org.hibernate.HibernateException: Missing table: DUMMY_TABLE 
    at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1127) 
    at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:139) 
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:359) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341) 
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) 
    at 

org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669) 

Das Problem ist, dass die Tabelle vorhanden ist und die Datenquelldatei richtig konfiguriert ist.

Was ich vermisse? Irgendwelche Ratschläge, um dies zu beheben?

Vielen Dank im Voraus!

Antwort

6

Das Problem ist, dass Sie die Tabelle vorhanden denken und dass die Datenquelle richtig konfiguriert ist, während Hibernate weiß, dass dies nicht richtig ist.

Erhöhen Sie die Protokollierungsstufen und verwenden Sie -Dhibernate.show_sql=true, um die Protokollierung für SQL-Anweisungen zu aktivieren. Das sollte helfen, diesen zu verfolgen.

[EDIT] Stellen Sie auch sicher, dass Sie keinen Leerraum vor oder nach einer @Table Annotation haben. Wenn Sie diese Anmerkung:

@Table(name = "myTable ") // Note the space after the name!! 

Dann wird Hibernate den zitierten Namen verwenden, um die Tabelle zu erstellen (so dass Sie eine Tabelle mit dem SQL-Namen 'MYTABLE ' haben), aber es wird nicht immer geben Sie die Namen, wenn Sie Abfragen ausführen .

+0

Die Ausgabe von Hibernate zeigt keine Tabellennamen mit Leerzeichen an. Sie sollten einige Klammern oder etwas hinzufügen – Tommy

+1

@Tommey: Fehlerbericht, bitte –

4

Vergewissern Sie sich auch, dass der Fall korrekt ist. Vielleicht haben Sie es in der Datenbank als dummy_table.

+0

Mein Tabellenname und der Name der Entität stimmen nicht überein. Schlechte Schreibweisen Danke – Ali

+0

Ich hatte das gleiche Problem. Jemand setzt @Table (name = "myTable") auf eine Entität und Hiberante erstellt die Tabelle. Wenn Hibernate dann überprüft, ob die Tabelle vorhanden ist, schneidet es wahrscheinlich den Tabellennamen ab und gibt Ihnen den Fehler. – Tommy

6

Ich hatte das gleiche Problem mit einer Ansicht, die ich in meinem Mapping verwendet. Nachdem ich die Überprüfung von Hibernate deaktiviert habe, funktioniert es korrekt. Scheint, dass die Validierung ein Problem mit Sichten hat.

+1

Lustig, ich bekomme 'Tabelle nicht gefunden' für tatsächliche Tabellen, aber Ansichten funktioniert. –

0

@Hendrik hat die richtige Idee. Ich hatte das gleiche Problem, und ich konnte das Problem beheben, indem ich die Beans unterhalb meiner Anwendungskontextdatei hinzufügte.

<bean id="dbUnitDatabaseConfig" class="com.github.springtestdbunit.bean.DatabaseConfigBean"> 
    <property name="caseSensitiveTableNames" value="false"/> 
    <property name="qualifiedTableNames" value="true"/> 
    <property name="datatypeFactory"> 
     <bean class="org.dbunit.ext.mysql.MySqlDataTypeFactory"/> 
    </property> 
    <property name="metadataHandler"> 
     <bean class="org.dbunit.ext.mysql.MySqlMetadataHandler"/> 
    </property> 
</bean> 
<bean id="dbUnitDatabaseConnection" class="com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean"> 
    <property name="databaseConfig" ref="dbUnitDatabaseConfig"/> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="transactionAware" value="true"/> 
    <property name="schema" value="yourSchemaName"/> 
</bean> 
2

Ich hatte das gleiche Problem mit einer MySQL-Datenbank. Das Problem war, dass ich Großbuchstaben für Tabellen verwendete. Ich habe sie gesenkt und jetzt funktioniert alles.

0

Ich habe die gleiche Ausnahme von Hibernate. In meinem Fall war es, weil der Datenbankbenutzer nicht richtig berechtigt war, die Tabellen zu sehen. Die Tabellen waren definitiv in der Datenbank vorhanden.

Nachdem ich dem Benutzer für diese Datenbank die Rollen db_datareader zugewiesen hatte, funktionierte es.

In einem anderen Fall, wo die Tabellen nicht wirklich da waren, bekam ich genau die gleiche Ausnahme von Hibernate. In Fällen, in denen die Tabellen vorhanden sind, denke ich, dass der Ruhezustand aus Sicherheitsgründen keine weiteren Informationen mehr enthält.

2

für mich gearbeitet, wenn ich @Table (name = "schema.tabelle") geändert Um @Table (name = "Tabelle", schema = "Schema")

0

Ich hatte ein ähnliches Problem mit postgresql und Hibernate 5.2.10.

Die Tabelle bestand definitiv. Als ich die Validierung deaktiviert habe, hat alles funktioniert.Es stellte sich heraus, dass die Tabelle wahrscheinlich nicht gefunden werden konnte, da Hibernate kein spezifiziertes Schema verarbeiten konnte. Es schien verwandt zu sein: https://hibernate.atlassian.net/browse/HHH-11286.

Ich aktualisierte postgresql und den Dialekt (PostgreSQLXXDialect). Das Problem ging danach weg.