2013-07-24 11 views
6

Używam testów z Arquillianem, JBoss, JPA/Hibernate, H2 DB i Maven. W moim pliku persistence.xml testowego mam:Hibernate SchemaExport nie może najpierw utworzyć schematu

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

Na razie mam jedną klasę użytkownika mapowany do tabeli Users poprzez adnotacje Hibernate.

Rzeczy prawie działają. Problemem jest Hibernate stara się wykonać:

drop table my_schema.users if exists 

Ale schemat „my_schema” nie istnieje, więc nie powiedzie się (Biegnę przeciwko w pamięci DB mimo wszystko).

Jak uzyskać hibernację, aby wykonać krok "Utwórz schemat my_schema", który wydaje się zapominać?

Aktualizacja: The widzę z Hibernate wiadomości:


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

Czy mógłbyś opublikować ślad stosu błędów? – Hippoom

+0

Oczywiście ... nie ma właściwie żadnych stacktraces per se, ale opublikowałem dane wyjściowe serwera. oczywiście później, gdy próbuję coś zrobić, np. zapisać nowego użytkownika, istnieją stosy, ponieważ tabela "użytkowników" nie istnieje, ale to jest oczekiwane ... – lostdorje

+0

Co się stanie, jeśli zmienisz "create-drop" jako "create"? – Hippoom

Odpowiedz

16

Znalazłem odpowiedź w innym SO Question.

Podczas definiowania adresu URL połączenia z DB należy dodać: "INIT = UTWÓRZ SCHEMAT, JEŚLI NIE ISTNIEJE". Tak pełny adres URL w pliku persistence.xml wygląda następująco:

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

gdzie ccmc to nazwa schematu, który ma zostać utworzony. Param DB_CLOSE_DELAY nie ma związku z problemem i można go bezpiecznie pominąć w tej kwestii.

Powiązane problemy