2017-01-11 8 views
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] 
+0

'id'カラムは自動インクリメントですから、なぜ最初の' INSERT'文に値を渡しますか? – Berger

+0

私は@Bergerの例を示すためにそれをしました。私がそれをしたときには働いていましたが、2番目のシナリオのように – legend

答えて

0

エンティティクラスの@Id注釈付きプロパティの上@GeneratedValue(strategy = GenerationType.IDENTITY)を入れてください。

関連する問題