2011-12-23 122 views
6

estoy usando hibernate con embedded derby, y quiero que hibernate cree la base de datos y las tablas, así que probé la siguiente configuración, pero recibo el error:java.sql.SQLException: Schema 'ROOT' no existe

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

aquí/es mi configuración:

<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" /> 

ACTUALIZACIÓN: es mi primer uso de derby, así que puede que tenga alguna información que falta, así que tengo una pregunta:

hacerlo tengo que configurar Derby incorporado como aquí:

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

ACTUALIZACIÓN 2: i eliminado el archivo de script import.sql en la ruta de clase, que es responsable de insertar datos de demostración en la base de datos, y entonces descubrí que hay un error en la creación de la tabla de base de datos:

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

nunca usado derby. pero definió el usuario "raíz" para la base de datos (con acceso a la base de pruebas) – Vinze

+0

bueno, acabo de probar la configuración como aquí, y pensé que debería crear la base de datos con el usuario/pase anterior http: // stackoverflow.com/questions/8459284/using-hibernate-with-embedded-derby/8463463#comment10693363_8463463 –

+0

aquí está un controlador incrustado tut: https://db.apache.org/derby/papers/DerbyTut/embedded_intro.html. Pero su código se ve bien – oers

Respuesta

3

tras eliminar el archivo import.sql de ruta de clase y ejecutar la aplicación, me encontré con que el error fue que se creó el DATABSE, pero las tablas no fue creado por hbm2ddl debido a la cuestión http://issues.apache.org/jira/browse/DERBY-789 declaró aquí: constraint problems using apache derby and hbm2ddl

que la clave principal no se puede definir como única, ya que la misma base de datos la maneja.

así que cuando eliminé el atributo único de la clave principal, el error desapareció.

0

lo sentimos, nunca utilizado Derby a mí mismo, pero creo que el problema es que Hibernate no puede crear ninguna base de datos, los usuarios de bases de datos o esquemas de bases para usted. Esto es solo una suposición, pero para mí el mensaje de error indica que también necesita un esquema de base de datos para el usuario. Intente crear la base de datos, la raíz del usuario de la base de datos y una raíz de esquema de antemano, luego conéctese con Hibernate para crear las tablas.

+0

; create = true debería ocuparse de eso – oers

+0

@oers: Gracias, no lo vi. Pero estoy seguro de que hibernate no puede crear un esquema, y ​​parece que falta el esquema para el usuario. Entonces, probaría con create = false y crearé la base de datos y el esquema de antemano. – tscho

+0

@tscho, actualicé la publicación, por favor avise. –

0

la solución más fácil es configurar sus propiedades de base de datos y hacer el mismo esquema como el nombre de usuario, pero en las camadas de capital ex: esquema de aplicación de usuario de la aplicación

esperan mi respuesta puede ayudar.

Cuestiones relacionadas