HQSLDB - Файловая база данных пуста, хотя в файлах есть содержимое?Зачем? - PullRequest
2 голосов
/ 23 января 2012

Люди,

Мой выпуск

Почему база данных HSQLDB на основе файлов, которую я предварительно заполнил схемой и данными, не заполняется при последующем подключении к ней?

Я думаю, что мне не хватает какой-то маленькой, но УЖЕ ВАЖНОЙ конфигурации.

Мое окружение

  1. Настройка HSQLDB с плагином Maven Sql и плагином Maven Liquibase.
  2. Spring / Hibernate Webapp

Шаги для заполнения базы данных и запуска приложения

  1. Запустите плагин Sql Maven, чтобы создать 3 схемы в базе данных HSQL

  2. Запустите плагин Maven liquibase, заполнив его данными ddl и lookup

URL-адрес jdbc, который я использую в Maven для настройки hsql: jdbc:hsqldb:file:${project.basedir}/target/db/build;shutdown=true.
Это переводится как: jdbc:hsqldb:file:/Users/myHomeDir/work/myProj/target/db/build;shutdown=true

Я подтвердил, что файлы базы данных hsql созданы и заполнены - операторы вставки в файле build.script присутствуют, как и ожидалось. Я могу подключиться к базе данных с помощью RazorSQL и посмотреть данные и таблицы.

Запуск приложения

Я настроил свой источник данных в конфигурации Spring следующим образом:

<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
        <property name="url" value="jdbc:hsqldb:file:/Users/myHomeDir/work/myProj/target/db/build;shutdown=true" />
        <property name="username" value="sa" />
        <property name="password" value="" />

Я запустил приложение и увидел, что Hibernate / Spring устанавливает соединение с базой данных. Файл database.lck создан, поэтому я знаю, что приложение установило соединение. (Также я гарантировал, что RazorSQL выключен и не использует базу данных одновременно).

Ошибка

Ошибка указывает, что объекты базы данных не существуют:

[INFO] Started Jetty Server
Hibernate: 
    select
        this_.id as id5_2_,
        this_.created_date as created2_5_2_,
        this_.creating_user_id as creating3_5_2_,
        this_.email as email5_2_,
        this_.first_name as first5_5_2_,
        this_.is_enabled as is6_5_2_,
        this_.last_login_date as last7_5_2_,
        this_.last_modified_date as last8_5_2_,
        this_.last_modifying_user_id as last9_5_2_,
        this_.last_name as last10_5_2_,
        this_.login as login5_2_,
        this_.middle_initial as middle12_5_2_,
        this_.password_hash as password13_5_2_,
        this_.password_history as password14_5_2_,
        this_.suffix as suffix5_2_,
        roles2_.user_id as user1_5_4_,
        role3_.id as role2_4_,
        role3_.id as id3_0_,
        role3_.code as code3_0_,
        role3_.description as descript3_3_0_,
        role3_.name as name3_0_,
        role3_.type_id as type5_3_0_,
        roletype4_.id as id4_1_,
        roletype4_.description as descript2_4_1_ 
    from
        security.user this_ 
    left outer join
        security.user_role roles2_ 
            on this_.id=roles2_.user_id 
    left outer join
        security.role role3_ 
            on roles2_.role_id=role3_.id 
    left outer join
        security.role_type roletype4_ 
            on role3_.type_id=roletype4_.id 
    where
        this_.login=?
[01/20/2012 17:30:18,440] WARN : org.hibernate.util.JDBCExceptionReporter - SQL Error: -5501, SQLState: 42501
[01/20/2012 17:30:18,440] ERROR: org.hibernate.util.JDBCExceptionReporter - user lacks privilege or object not found: USER
2012-01-20 17:30:18.443:WARN::/my-webapp/j_spring_security_check
org.hibernate.exception.SQLGrammarException: could not execute query

1 Ответ

3 голосов
/ 23 января 2012

Просто чтобы убедиться, не может ли это быть вызвано конфликтом имени таблицы (USER) с ключевым словом SQL?

Попробуйте вместо этого использовать другое имя таблицы или, по крайней мере, сконфигурируйте Hibernate, чтобы избежать его (@Table(name = "\"user\"")).

...