2009-09-18 19 views
3

Nous utilisons hibernate entitymanager pour mapper nos entités via JPA. Et nous utilisons la base de données HSQLDB en mémoire pour les tests unitaires. Tout allait bien jusqu'à ce qu'un refactoring récent au modèle a commencé à causer l'erreur suivante:Table introuvable avec Hibernate et HSQLDB

17:55:48.516 [main] WARN o.h.util.JDBCExceptionReporter - SQL Error: -22, SQLState: S0002 
17:55:48.517 [main] ERROR o.h.util.JDBCExceptionReporter - Table not found in statement 

Je ne peux pas poster SQL en question, mais quelqu'un peut me donner des pointeurs sur les causes possibles de l'erreur ci-dessus? d'autant plus que je sais que le code fonctionnait avant. Il semble que hibernate génère des sqls invalides à cause du refactor?

Répondre

2

Eh bien, la table est-elle réellement là? Activez la sortie SQL pour Hibernate et vérifiez-la par rapport au schéma de la base de données.

Votre refactorisation a peut-être été bâclée (l'entité et la table ont été renommées, la requête nommée n'a pas été mise à jour).

Ou vous pouvez avoir une classe plus ancienne dans le classpath provoquant la lecture d'annotations erronées.

+3

Turns sur une entité a été nommé à un mot réservé, ce qui provoque la création de la table à l'échec. – shipmaster

+0

réservé mot - J'ai eu le même problème! –

3

Cela peut également indiquer une discordance entre le pilote JDBC et le dialecte Hibernate. Nous avons obtenu ceci lorsque la connexion du pilote JDBC était HSQLDB et le dialecte Hibernate était org.hibernate.dialect.Oracle10gDialect.

Le message d'exception correspondant: [ERREUR]: n'a pas pu obtenir les métadonnées de base de données java.sql.SQLException: Table introuvable dans l'instruction [select sequence_name de all_sequences]

+0

Et comment l'avez-vous résolu? – dvtoever

+0

Hibernate doit avoir défini un dialecte SQL. Il doit correspondre au fournisseur de base de données configuré dans l'uri jdbc. Vous pouvez trouver un exemple de la façon de configurer Hibernate session-factory pour utiliser un certain dialecte SQL ici: http://docs.jboss.org/hibernate/orm/4.3/manual/fr-FR/html/ch01.html# tutorial-firstapp-configuration –

1

J'ai eu ce problème aussi, dans mon cas J'ai eu quelque chose comme ça dans l'entité

@Column (name = "AVAIL_TARGET_PERCENT", columnDefinition = "nombre (5,2)", annulable = false)

il suffit d'éviter le columnDefinition (le sortir!) et ça devrait aller. Je l'ai fait, et le problème a été corrigé

1

Nous recevions également la même exception. Il s'avère que la propriété hibernate.dialect a été définie comme org.hibernate.dialect.Oracle10gDialect avec la base de données H2 servant de source de données. La solution consiste à supprimer hibernate.dialect et n'utiliser aucune valeur. Mise en veille prolongée ont la capacité de détecter automatiquement le dialecte des métadonnées en fonction extraites de la configuration de la source de données
Pour plus d'informations sur mise en veille prolongée détecte automatiquement le dialecte
https://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/portability.html