/ / AutoIncrement Hsqldb mit Spring funktioniert nicht - Java, Spring, Integrationstests, Hsqldb

AutoIncrement Hsqldb mit Feder funktioniert nicht - Java, Feder, Integrationstest, hsqldb

Ich versuche einen Integrationstest mit einemeingebettete Datenbank. Ich versuche dies mit der hsqldb-Datenbank zu tun, indem ich die Verwendung von Skripten nutze und wenn ich versuche, meine ohne ID einzugeben, obwohl ich meine ID auf Autoincrement setze, stelle ich eine Ausnahme fest, die nicht so ist, dass ich sie nicht einbeziehe meine ID.

Ich habe das gleiche Skript mit der HSQLDB ausprobiertManager und alles funktioniert gut für mich, so bin ich nicht sicher, warum dies geschieht. Verbrachte einige Zeit damit, eine Lösung zu finden, aber ich nahm an, dass vielleicht jemand dies erlebt hat.

Hier ist eine Java-Klasse

package com.whot.dao;

import com.whot.domain.Hotspot;
import com.whot.repository.HotspotRespository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.jdbc.SqlGroup;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import static org.hibernate.validator.internal.util.Contracts.assertNotNull;
import static org.junit.Assert.assertEquals;

@RunWith(SpringJUnit4ClassRunner.class)
@DataJpaTest
@ActiveProfiles("test")
@SqlGroup({
@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD, scripts ={"classpath:create_tables.sql"}),
@Sql(executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD, scripts = {"classpath:rollback/rollback_tables.sql"})
})



public class HotspotRepositoryTest {

@Autowired
private HotspotRespository hotpsotRepo;

@Autowired
private TestEntityManager em;


@Test
public void TestSaveHotspot(){

//test code goes here
}
}

Hier ist mein Skript

CREATE TABLE IF NOT EXISTS address (
id BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1, INCREMENT BY 1),
street_name VARCHAR(256),
unit INT,
street_number INT,
CONSTRAINT address_pk PRIMARY KEY (ID)
);

INSERT INTO address(id, street_name, unit, street_number) VALUES (1, "Ossiomo Street", -1, 2);

INSERT INTO address(street_name, unit, street_number) VALUES ("first street", 10, 780);

Hier ist die Stapelverfolgung

Caused by: org.hsqldb.HsqlException: integrity constraint violation: NOT NULL check constraint; SYS_CT_10094 table: ADDRESS column: ID
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.3.4.jar:2.3.4]
at org.hsqldb.Table.enforceRowConstraints(Unknown Source) ~[hsqldb-2.3.4.jar:2.3.4]
at org.hsqldb.Table.generateAndCheckData(Unknown Source) ~[hsqldb-2.3.4.jar:2.3.4]
at org.hsqldb.Table.insertSingleRow(Unknown Source) ~[hsqldb-2.3.4.jar:2.3.4]
at org.hsqldb.StatementDML.insertSingleRow(Unknown Source) ~[hsqldb-2.3.4.jar:2.3.4]
at org.hsqldb.StatementInsert.getResult(Unknown Source) ~[hsqldb-2.3.4.jar:2.3.4]
at org.hsqldb.StatementDMQL.execute(Unknown Source) ~[hsqldb-2.3.4.jar:2.3.4]
at org.hsqldb.Session.executeCompiledStatement(Unknown Source) ~[hsqldb-2.3.4.jar:2.3.4]
at org.hsqldb.Session.executeDirectStatement(Unknown Source) ~[hsqldb-2.3.4.jar:2.3.4]
at org.hsqldb.Session.execute(Unknown Source) ~[hsqldb-2.3.4.jar:2.3.4]

Antworten:

0 für die Antwort № 1

Stellen @GeneratedValue(strategy = GenerationType.IDENTITY) über der mit @Id gekennzeichneten Eigenschaft in der Entitätsklasse.