Java 弹簧不工作时自动增量Hsqldb
我正在尝试使用嵌入式数据库运行集成测试。我尝试使用hsqldb数据库来实现这一点,利用脚本的使用,当我尝试在没有id的情况下输入我的id时,尽管我将id设置为autoincrement,但我遇到了一个异常,我没有包括我的id 我使用HSQLDB管理器尝试了相同的脚本,一切都很好,所以我不知道为什么会发生这种情况。花了相当长的时间试图找到一个解决方案,但我想可能有人经历过这种情况 这里有一个java类Java 弹簧不工作时自动增量Hsqldb,java,spring,integration-testing,hsqldb,Java,Spring,Integration Testing,Hsqldb,我正在尝试使用嵌入式数据库运行集成测试。我尝试使用hsqldb数据库来实现这一点,利用脚本的使用,当我尝试在没有id的情况下输入我的id时,尽管我将id设置为autoincrement,但我遇到了一个异常,我没有包括我的id 我使用HSQLDB管理器尝试了相同的脚本,一切都很好,所以我不知道为什么会发生这种情况。花了相当长的时间试图找到一个解决方案,但我想可能有人经历过这种情况 这里有一个java类 package com.whot.dao; import com.whot.domain.Ho
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]
将
@GeneratedValue(strategy=GenerationType.IDENTITY)
放在实体类中@Id注释属性的上方。因为Id
列是自动递增的,为什么要在第一个INSERT
语句中传递一个值?我这样做是为了向大家展示一个例子@Berger,当我这样做时,它是有效的,但当我像在第二个场景中那样取出它时,它就不起作用了