0
組み込みデータベースを使用して統合テストを実行しようとしています。私はhsqldbデータベースでこれをやろうとしています。スクリプトの使用を利用しています.Idなしで入力しようとすると、私は自分のIDをautoincrementに設定しましたが、例外はありません。私のID。Springが動作していないAutoIncrement Hsqldb
HSQLDBマネージャを使用して同じスクリプトを試しましたが、すべてがうまく動作するので、なぜこれが起こっているのか分かりません。いつか解決策を見つけようとしたが、誰かがこれを経験したかもしれないと思った。ここで
は、Javaクラスは、ここで
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
}
}
だ私のスクリプトが
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);
です。ここスタックトレースだ
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]
'id'カラムは自動インクリメントですから、なぜ最初の' INSERT'文に値を渡しますか? – Berger
私は@Bergerの例を示すためにそれをしました。私がそれをしたときには働いていましたが、2番目のシナリオのように – legend