SequenceGenerator problème avec les tests unitaires dans Hsqldb/H2
J'ai essayé d'utiliser à la fois Hsqldb et H2 pour les tests unitaires, mais face à problème avec la séquence des générateurs. Champ déclaration ressemble à ceci.
@Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="keyword_seq")
@SequenceGenerator(name="keyword_seq",sequenceName="KEYWORD_ID_SEQ", allocationSize=1)
@Column(name="IM_KEYWORD_ID")
private Long keywordId;
Quand j'essaie de test simple insertion dans la table de Hsqldb avec la configuration suivante, il donne une erreur
<prop key="hibernate.connection.driver_class">org.hsqldb.jdbc.JDBCDriver</prop>
<prop key="hibernate.connection.url">jdbc:hsqldb:mem:testdb;sql.syntax_ora=true</prop>
Erreur :
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: KEYWORD_ID_SEQ.NEXTVAL
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
Avec H2:
<prop key="hibernate.connection.driver_class">org.h2.Driver</prop>
<prop key="hibernate.connection.url">jdbc:h2:~/test</prop>
D'erreur est :
Hibernate: select KEYWORD_ID_SEQ.nextval from dual
3085 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 42001, SQLState: 42001
3088 [main] ERROR org.hibernate.util.JDBCExceptionReporter - Syntax error in SQL statement "SELECT KEYWORD_ID_SEQ.NEXTVAL FROM[*] DUAL "; expected "identifier"; SQL statement:
Aucune idée comment résoudre ce problème?
Tous mes cours sont annotation de base.
OriginalL'auteur RandomQuestion | 2011-09-19
Vous devez vous connecter pour publier un commentaire.
Je pense que le dialecte est fausse. Pouvez-vous vérifier votre hibernate.
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
Vous devez le modifier pour org.mise en veille prolongée.le dialecte.HSQLDialect pour HSQL et org.mise en veille prolongée.le dialecte.H2Dialect pour H2. Comme vous le remarquez hibernate est tir des requêtes Oracle contre HSQL & H2 base de données, d'où les erreurs.
J'ai changé pour le dialecte, vous avez mentionné, mais encore avoir d'erreur. Pour HSQLDB, l'erreur est
user lacks privilege or object not found: KEYWORD_ID_SEQ
. Pour H2, sonERROR org.hibernate.util.JDBCExceptionReporter - Sequence "KEYWORD_ID_SEQ" not found; SQL statement:call next value for KEYWORD_ID_SEQ [90036-147]
. Avons-nous besoin pour créer des séquences au moment du démarrage de nous-mêmes?Oui, vous devez utiliser la mise en veille prolongée.hbm2ddl.auto pour créer le schéma de base de données est créé au cours du démarrage.
Merci beaucoup gkamal, je suis en utilisant annoté de la classe donc je suppose que
hibernate.hbm2ddl.auto
n'est pas nécessaire. En changeant simplement le Dialecte de le faire fonctionner. C'était une faute de frappe plus tôt ou a été somnolence.OriginalL'auteur gkamal