2016-12-13 3 views
0

Ich erstelle create-Methode für meine Anwendung. In Test I hsql db und mit Spring jdbcTemplateFehler beim Testen Zeile in eingebettetem hsqldb mit jdbcTemplate einfügen

<jdbc:embedded-database id="dataSource" type="HSQL"> 
    <jdbc:script location="classpath:/sql/db/db-schema.sql"/> 
    <jdbc:script location="classpath:/sql/db/db-data.sql"/> 
</jdbc:embedded-database> 

wo db-data.sql ist

INSERT INTO C_ContactType(name) VALUES ('bob_eng991'); 
INSERT INTO C_ContactType(name) VALUES ('bob_eng2'); 
INSERT INTO C_ContactType(name) VALUES ('bob_eng3'); 
INSERT INTO C_ContactType(name) VALUES ('bob_eng422'); 

db-schema.sql ist

CREATE TABLE C_ContactType (
    contactTypeId INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, 
    name VARCHAR(90) NOT NULL, 
    deletedOn DATETIME, 
    deletedBy INT 
); 

und mein Test eingebettet haben ist

@Test 
void test_createClassifier() { 

    mockMvc.perform(MockMvcRequestBuilders.post("/classifiers/{category}", "ContactType") 
      .contentType(MediaType.APPLICATION_JSON) 
      .param("languageId", String.valueOf(3)) 
      .content("{ \"name\": \"bob_eng100\"}".getBytes())) 
      .andExpect(status().isOk()) 

} 

Lauftest ich hier Fehler

ResultSet rs = jdbcTemplate.insertWithKey(tablePath, 
      insert -> insert.columns(paths.toArray(new Path[paths.size()])) 
        .values(params.toArray(new Object[paths.size()])) 
        .executeWithKeys()); 

wo tablePath zeigt auf „C_ContactType“, Wege eine Arraylist mit meinen Tabellenspalten außer autoIncrement Feld ist, und params eine Arraylist mit Werten (außer autoIncrement Feld)

und Protokolle

Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: contactTypeId 
at org.hsqldb.error.Error.error(Unknown Source) 
at org.hsqldb.error.Error.error(Unknown Source) 
at org.hsqldb.Table.getColumnIndex(Unknown Source) 
at org.hsqldb.Table.getColumnIndexes(Unknown Source) 
at org.hsqldb.StatementDML.setGeneratedColumnInfo(Unknown Source) 
at org.hsqldb.StatementManager.compile(Unknown Source) 
at org.hsqldb.Session.execute(Unknown Source) 
... 82 more 

Antwort

0

der Fehler die Namen der durch den Rahmen angeforderte Spalt zeigen. Der Name ist in Großbuchstaben .

Ihre Tabellendeklaration enthält keine doppelten Anführungszeichen um die Tabellen- und Spaltennamen. Daher werden die Namen vom Datenbankmodul in Großbuchstaben konvertiert. Sie müssen die Tabellendefinition ändern:

CREATE TABLE C_ContactType (
"contactTypeId" INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, 
+0

Dank, ich es versuchen, aber ich habe Tests mit Datenaktualisierung auch, und sie verhalten sich normalerweise –

+0

neuesten Code in HSQLDB SVN/base/Stamm ohne Änderung der Tabelle arbeiten sollten Definition – fredt

Verwandte Themen