2010-12-06 10 views
2

Je reçois l'exception suivante avec mise en veille prolongée:« Tableau not found » exception avec mise en veille prolongée

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) 

Le problème est que la table existe et le fichier source de données est correctement configuré.

Qu'est-ce qui me manque? Des conseils pour résoudre ce problème?

Merci d'avance!

Répondre

6

Le problème est que vous pensez la table existe et que la source de données est correctement configuré en veille prolongée sait que ce n'est pas correct.

Augmentez les niveaux de consignation et utilisez -Dhibernate.show_sql=true pour activer la consignation des instructions SQL. Cela devrait aider à dépister celui-ci.

[EDIT] Assurez-vous également de ne pas avoir d'espace avant ou après une annotation @Table. Si vous avez cette annotation:

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

Hibernate utilisera le nom cité pour créer la table (vous aurez une table avec le nom SQL 'MYTABLE ') mais il ne sera pas toujours citer le nom lorsque vous exécutez des requêtes .

+0

La sortie d'hibernate n'affiche pas les noms de tables avec des espaces. Ils doivent ajouter des parenthèses ou quelque chose. – Tommy

+1

@Tommey: Déposer un rapport de bogue, veuillez –

4

Assurez-vous également que le boîtier est correct. Vous pourriez l'avoir dans la base de données comme dummy_table peut être.

+0

Mon nom de table et le nom de l'entité ne correspondent pas. Mauvaise orthographe. Merci – Ali

+0

J'ai eu le même problème. Quelqu'un a mis @Table (name = "myTable") sur une entité et Hiberante crée la table. Quand Hibernate vérifie ensuite si la table existe, elle coupe probablement le nom de la table et vous donne l'erreur. – Tommy

6

J'ai eu le même problème avec une vue que j'ai utilisée dans ma cartographie. Après avoir désactivé la validation d'Hibernate, cela fonctionne correctement. Il semble que la validation a un problème avec les vues.

+1

Drôle, j'obtiens 'table non trouvé' pour les tables réelles, mais les vues fonctionne. –

0

@Hendrik a la bonne idée. J'ai eu le même problème et j'ai été en mesure de résoudre le problème en ajoutant les haricots ci-dessous à mon fichier de contexte applicaiton.

<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

J'ai eu le même problème avec une base de données mysql. Le problème était que j'ai utilisé des noms en majuscules pour les tables. Je les ai baissés et maintenant tout fonctionne.

0

J'ai reçu la même exception d'hibernate. Dans mon cas, c'était parce que l'utilisateur de la base de données n'était pas correctement autorisé à voir les tables. Les tables étaient définitivement là sur la base de données.

Après avoir attribué les rôles db_datareader à l'utilisateur pour cette base de données cela a fonctionné.

Cependant, dans un autre cas, où les tables n'étaient pas réellement là, j'ai exactement la même exception d'hibernate. Dans les cas où les tables sont là, je pense qu'Hibernate ne montrera pas plus d'informations pour des raisons de sécurité.

2

travaillé pour moi quand je l'ai changé @Table (name = "schema.table") Pour @Table (name = "table", schéma = "schéma")

0

J'ai eu un problème similaire avec postgresql et hibernate 5.2.10.

La table existait définitivement. Quand j'ai désactivé la validation, tout a fonctionné.Il s'est avéré que la table ne pourrait probablement pas être trouvée car Hibernate ne pouvait pas gérer aucun schéma spécifié. Il semblait lié à: https://hibernate.atlassian.net/browse/HHH-11286.

J'ai mis à jour postgresql et le dialecte (PostgreSQLXXDialect). Le problème est parti après cela.