2013-07-24 2 views
6

J'exécute des tests en utilisant Arquillian, JBoss, JPA/Hibernate, H2 DB et Maven. Dans mon dossier persistence.xml test je:Hibernate SchemaExport ne parvient pas à créer le schéma en premier

<property name="hibernate.hbm2ddl.auto" value="create-drop" /> 
<property name="hibernate.show_sql" value="true" /> 

Pour l'instant j'ai une seule classe d'utilisateurs mis en correspondance avec une table « utilisateurs » via annotations Hibernate.

Les choses fonctionnent presque. Le problème est Hibernate tente d'exécuter:

drop table my_schema.users if exists 

Mais le schéma, « my_schema » n'existe pas, il échoue (je suis en cours d'exécution contre un DB après tout en mémoire).

Comment obtenir hibernate pour exécuter l'étape 'create schema my_schema' qu'il semble oublier?

Mise à jour: Les messages que je vois de Mise en veille prolongée:


09:42:45,402 INFO [org.jboss.as.jpa] (MSC service thread 1-7) JBAS011402: Starting Persistence Unit Service 'test.war#ccmc' 
09:42:45,524 INFO [org.hibernate.annotations.common.Version] (MSC service thread 1-7) HCANN000001: Hibernate Commons Annotations {4.0.1.Final} 
09:42:45,532 INFO [org.hibernate.Version] (MSC service thread 1-7) HHH000412: Hibernate Core {4.0.1.Final} 
09:42:45,535 INFO [org.hibernate.cfg.Environment] (MSC service thread 1-7) HHH000206: hibernate.properties not found 
09:42:45,542 INFO [org.hibernate.cfg.Environment] (MSC service thread 1-7) HHH000021: Bytecode provider name : javassist 
09:42:45,572 INFO [org.hibernate.ejb.Ejb3Configuration] (MSC service thread 1-7) HHH000204: Processing PersistenceUnitInfo [ 
    name: ccmc 
    ...] 
09:42:45,739 INFO [org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator] (MSC service thread 1-7) HHH000130: Instantiating explicit connection provider: org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider 
09:42:45,956 INFO [org.hibernate.dialect.Dialect] (MSC service thread 1-7) HHH000400: Using dialect: org.hibernate.dialect.H2Dialect 
09:42:45,962 WARN [org.hibernate.dialect.H2Dialect] (MSC service thread 1-7) HHH000431: Unable to determine H2 database version, certain features may not work 
09:42:45,965 INFO [org.hibernate.engine.jdbc.internal.LobCreatorBuilder] (MSC service thread 1-7) HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4 
09:42:45,973 INFO [org.hibernate.engine.transaction.internal.TransactionFactoryInitiator] (MSC service thread 1-7) HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jta.CMTTransactionFactory 
09:42:45,976 INFO [org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory] (MSC service thread 1-7) HHH000397: Using ASTQueryTranslatorFactory 
09:42:46,003 INFO [org.hibernate.validator.util.Version] (MSC service thread 1-7) Hibernate Validator 4.2.0.Final 
09:42:46,269 INFO [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-7) HHH000227: Running hbm2ddl schema export 
09:42:46,275 INFO [stdout] (MSC service thread 1-7) Hibernate: drop table ccmc.users if exists 
09:42:46,283 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-7) HHH000389: Unsuccessful: drop table ccmc.users if exists 
09:42:46,283 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-7) Schema "CCMC" not found; SQL statement: 
drop table ccmc.users if exists [90079-161] 
09:42:46,284 INFO [stdout] (MSC service thread 1-7) Hibernate: create table ccmc.users (user_id decimal(19,2) generated by default as identity, email varchar(100) not null unique, primary key (user_id)) 
09:42:46,285 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-7) HHH000389: Unsuccessful: create table ccmc.users (user_id decimal(19,2) generated by default as identity, email varchar(100) not null unique, primary key (user_id)) 
09:42:46,285 ERROR [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-7) Schema "CCMC" not found; SQL statement: 
create table ccmc.users (user_id decimal(19,2) generated by default as identity, email varchar(100) not null unique, primary key (user_id)) [90079-161] 
09:42:46,286 INFO [org.hibernate.tool.hbm2ddl.SchemaExport] (MSC service thread 1-7) HHH000230: Schema export complete 
+0

pourriez-vous publier les stacktraces d'erreur? – Hippoom

+0

bien sûr ... il n'y a pas réellement de stacktraces en soi, mais j'ai posté la sortie du serveur. bien sûr plus tard quand j'essaye de faire quelque chose, comme enregistrer un nouvel utilisateur il y a des stacktraces car la table 'users' n'existe pas, mais c'est prévu ... – lostdorje

+0

Que faire si vous changez "create-drop" en "create"? – Hippoom

Répondre

16

J'ai trouvé la réponse dans une autre SO Question.

Lors de la définition de l'URL de connexion à la base de données, il faut ajouter: "INIT = CREATE SCHEMA IF NOT EXISTS". Ainsi, l'URL complète dans le fichier persistence.xml ressemble:

<connection-url>jdbc:h2:mem:test-db;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS ccmc</connection-url> 

ccmc est le nom du schéma à créer. Param DB_CLOSE_DELAY est sans rapport avec le problème et peut être omis en toute sécurité à ce sujet.

Questions connexes