2013-07-24 14 views
6

Ich verwende Tests mit Arquillian, JBoss, JPA/Hibernate, H2 DB und Maven. In meinem Test persistence.xml Datei habe ich:Hibernate SchemaExport kann zuerst kein Schema erstellen

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

Vorerst ich eine einzelne User-Klasse zu einem "Benutzer-Tabelle über Hibernate Annotations abgebildet haben.

Die Dinge arbeiten fast. Das Problem ist Hibernate versucht auszuführen:

drop table my_schema.users if exists 

Aber das Schema 'my_schema' existiert nicht so versagt es (ich laufe gegen eine In-Memory-DB, nachdem alle).

Wie bekomme ich Hibernate, um den Schritt "create schema my_schema" auszuführen, den es zu vergessen scheint?

Update: Die Nachrichten, die ich aus dem Ruhezustand zu sehen:


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

könnten Sie die Fehler Stacktraces? – Hippoom

+0

sicher ... es gibt eigentlich keine Stacktraces per se, aber ich habe die Serverausgabe gepostet. Natürlich später, wenn ich versuche, etwas zu tun, wie einen neuen Benutzer zu speichern gibt es Stacktraces, weil die 'Benutzer' Tabelle nicht existiert, aber das ist zu erwarten ... – lostdorje

+0

Was ist, wenn Sie "create-drop" als "create" ändern? – Hippoom

Antwort

16

ich die Antwort in einem anderen SO Question gefunden.

Bei der Definition der Verbindungs-URL zum DB muss Folgendes hinzugefügt werden: "INIT = CREATE SCHEMA IF NOT EXISTS". So ist die vollständige URL in der Datei persistence.xml wie folgt aussieht:

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

wo ccmc den Namen des Schemas erstellt werden soll. Param DB_CLOSE_DELAY ist nicht mit dem Problem verbunden und kann in dieser Angelegenheit sicher weggelassen werden.