2013-08-12 6 views
5

Środowiska: sprężyna (3.2.3.RELEASE) + MyBatis (3.2.2) + HSQL (2.3.0)raporty hsqldb "użytkownik pozbawiony przywileju lub przedmiotu nie znaleziono" tylko w pamięci opartych na bazie

<resultMap id="hashMapResult" type="java.util.HashMap"> 
    <result property="key" column="key" /> 
    <result property="value" column="value" /> 
</resultMap> 

<select id="getSettings" resultMap="hashMapResult"> 
    SELECT "KEY","VALUE" from "PUBLIC"."SETTINGS"; 
</select> 

    create table "SETTINGS" (
    "KEY" varchar(255) not null, 
    "VALUE" varchar(512) not null, 
    CONSTRAINT SETTINGS_KEY_UNIQUE UNIQUE("KEY") 
    ); 

URL: jdbc: hsqldb: mem: mydb; sql.syntax_mys = true; shutdown = true;

Przy zastosowaniu bazy pamięci, pojawiły się następujące błędy:

Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: SETTINGS 
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0] 
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0] 
at org.hsqldb.SchemaManager.getTable(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0] 
at org.hsqldb.ParserDQL.readTableName(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0] 
at org.hsqldb.ParserDQL.readTableOrSubquery(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0] 
at org.hsqldb.ParserDQL.XreadTableReference(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0] 

Jednak przy użyciu plików opartych JDBC bazy danych: hsqldb: file: mydb; sql.syntax_mys = true; shutdown = true; bez błędów.

Używam Wiosny EmbeddedDatabaseFactory init bazie danych:

try { 
     EmbeddedDatabaseFactory dbFactory = new EmbeddedDatabaseFactory(); 
     DatabaseConfig dbConfig = appConfig.getDbConfig(); 
     ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); 
     populator.setContinueOnError(false); 
     populator.setIgnoreFailedDrops(false); 
     DefaultResourceLoader resourceLoader = new DefaultResourceLoader(); 
     populator.addScript(resourceLoader.getResource(dbConfig 
       .getSqlSchemeFile())); 
     populator.addScript(resourceLoader.getResource(dbConfig 
       .getSqlDataFile())); 
     dbFactory.setDatabasePopulator(populator); 
     dbFactory.setDatabaseName(dbConfig.getName()); 
     dbFactory.setDatabaseConfigurer(new HSQLConfigurer(dbConfig)); 
     return dbFactory.getDatabase(); 
    } catch (Exception e) { 
     logger.error("dataSource error", e); //$NON-NLS-1$ 

     return null; 
    } 

ktoś wie dlaczego?

Odpowiedz

5

Nie należy używać shutdown = true w tym kontekście. Wygląda na to, że połączenie jest zamknięte, a baza danych jest wyłączona, co oznacza, że ​​baza danych pamięci już nie istnieje.

Należy również unikać używania VALUE jako nazwy kolumny. To jest słowo kluczowe.

+2

usuwając "shutdown = true" rozwiązać mój problem. Dzięki. – SunLiWei

Powiązane problemy