2011-12-23 10 views
6

Sto utilizzando l'ibernazione con derby incorporato, e voglio che hibernate crei il database e le tabelle, quindi ho provato la seguente configurazione, ma sto ricevendo l'errore:java.sql.SQLException: Schema "ROOT" inesistente

java.sql.SQLException: Schema 'ROOT' does not exist 

qui/s la mia configurazione:

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 

    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan" value="com.myapp.domain" /> 


    <property name="hibernateProperties"> 
     <value> 
      hibernate.dialect=org.hibernate.dialect.DerbyDialect 
      hibernate.hbm2ddl.auto=create 
      hibernate.show_sql=false 
      hibernate.format_sql=false 
     </value> 
    </property> 

</bean> 

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 

    <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver" /> 

    <property name="url" value="jdbc:derby:test;create=true" /> 

    <property name="username" value="root" /> 

    <property name="password" value="root" /> 

</bean> 

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 


<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 

UPDATE: è il mio primo utilizzo di derby così ho forse avere qualche informazioni mancanti, quindi ho una domanda:

Devo configurare Derby Embedded come qui:

http://db.apache.org/derby/papers/DerbyTut/install_software.html

UPDATE 2: Ho rimosso il file di script import.sql sul classpath, che è responsabile per l'inserimento dei dati nel database demo, e ho scoperto che ci sia un errore nella creazione della tabella del database:

1202 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - Running hbm2ddl schema export 
1202 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - exporting generated schema to database 
1359 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - Unsuccessful: create table users (user_id bigint generated by default as identity unique, address varchar(255), email varchar(155) not null, mobile varchar(25), name varchar(25) not null, password varchar(255) not null, primary key (user_id)) 
1359 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - Constraints 'SQL111223214919671' and 'SQL111223214919670' have the same set of columns, which is not allowed. 
1359 [main] INFO org.hibernate.tool.hbm2ddl.SchemaExport - schema export complete 
1360 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Warning: 10000, SQLState: 01J01 
1360 [main] WARN org.hibernate.util.JDBCExceptionReporter - Database 'test' not created, connection made to existing database instead. 
+0

derby mai usato. ma hai definito l'utente "root" per il database (con accesso alla base di test) – Vinze

+0

beh, ho appena provato la configurazione come qui, e ho pensato che dovrebbe creare il database con sopra utente/passaggio http: // stackoverflow.com/questions/8459284/using-hibernate-with-embedded-derby/8463463#comment10693363_8463463 –

+0

heres un tut driver incorporato: https://db.apache.org/derby/papers/DerbyTut/embedded_intro.html. Ma il tuo codice sembra buono – oers

risposta

3

dopo aver rimosso il file import.sql da classpath e l'esecuzione dell'applicazione, ho trovato che l'errore era che il databse è stato creato, ma i tavoli non è stato creato da hbm2ddl a causa della questione http://issues.apache.org/jira/browse/DERBY-789 dichiarato qui: constraint problems using apache derby and hbm2ddl

che la chiave primaria non può essere definita come unica, poiché viene gestita dal database stesso.

così quando ho rimosso l'attributo univoco dalla chiave primaria, l'errore è sparito.

0

Siamo spiacenti, mai usato Derby me stesso, ma penso che il problema è che Hibernate non può creare alcun database, gli utenti di database o schemi di database per voi. Questa è solo un'ipotesi, ma per me il messaggio di errore indica che è anche necessario uno schema di database per l'utente. Prova a creare in anticipo il database, la radice utente del database e una root schema, quindi connettiti con Hibernate per creare le tabelle.

+0

; create = true dovrebbe occuparsi di quello – oers

+0

@oers: Grazie, non l'ho visto. Ma sono abbastanza sicuro che l'ibernazione non può creare uno schema e sembra che manchi lo schema per l'utente. Quindi, proverei con create = false e creerò preventivamente il database e lo schema. – tscho

+0

@tscho, ho aggiornato il post, si prega di avvisare. –

0

la soluzione più semplice è quella di configurare le proprietà del database e rendere lo schema uguale al nome utente, ma in cucciolate di capitale ex: schema APP utente app

speranza la mia risposta può aiutare.