java.sql.SQLException: схема 'ROOT' не существует - PullRequest
6 голосов
/ 23 декабря 2011

Я использую Hibernate с Embedded Derby, и я хочу, чтобы Hibernate создал базу данных и таблицы, поэтому я попробовал следующую конфигурацию, но я получаю сообщение об ошибке:

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

здесь / s моя конфигурация:

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

ОБНОВЛЕНИЕ: это мое первое использование дерби, поэтому у меня может быть некоторая недостающая информация, поэтому у меня есть вопрос:

Должен ли я настроить встроенное дерби, как здесь:

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

ОБНОВЛЕНИЕ 2: я удалил файл сценария import.sql в classpath, который отвечает за вставку демонстрационных данных в базу данных, и обнаружил, что при создании таблицы базы данных произошла ошибка:

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.

Ответы [ 3 ]

3 голосов
/ 23 декабря 2011

после удаления файла import.sql из classpath и запуска приложения, я обнаружил, что ошибка в том, что база данных создана, но таблицы не были созданы hbm2ddl из-за проблемы http://issues.apache.org/jira/browse/DERBY-789 здесь указано: проблемы с ограничениями при использовании Apache Derby и hbm2ddl

что первичный ключ не может быть определен как уникальный, так как он обрабатывается самой базой данных.

поэтому, когда я удалил уникальный атрибут из первичного ключа, ошибка исчезла.

0 голосов
/ 27 августа 2017

самое простое решение - настроить свойства базы данных и сделать схему такой же, как имя пользователя, но в заглавных буквах, например: приложение пользователя схемы APP

надеюсь, мой ответ может помочь.

0 голосов
/ 23 декабря 2011

Извините, я никогда не использовал Derby, но я думаю, что проблема в том, что Hibernate не может создавать для вас базы данных, пользователей баз данных или схемы баз данных.Это только предположение, но для меня сообщение об ошибке указывает, что вам также нужна схема базы данных для пользователя.Попробуйте заранее создать базу данных, пользователя базы данных и корня схемы, затем соединитесь с Hibernate для создания таблиц.

...