Oracle HSQLDB无法正确识别JPA注释中的主键+;获取完整性约束冲突
我们使用Oracle作为生产数据库,使用HSQLDB作为内存单元测试数据库和DBUnit。我正在从数据集文件加载一些预定义的数据。这两种环境都使用Hibernate(现在我正在从3.5升级到5.0.3)作为JPA提供程序。以下代码在生产环境中正常工作,但在jUnit下运行时抛出SQL错误:-104,SQLState:23505-完整性约束冲突:唯一约束或索引冲突。当我创建新记录时,id将填充为1,而不是数据集文件中的最大id 请让我知道任何帮助 下面是实体、测试类和数据集文件 实体:Oracle HSQLDB无法正确识别JPA注释中的主键+;获取完整性约束冲突,oracle,java-8,hsqldb,dbunit,hibernate-5.x,Oracle,Java 8,Hsqldb,Dbunit,Hibernate 5.x,我们使用Oracle作为生产数据库,使用HSQLDB作为内存单元测试数据库和DBUnit。我正在从数据集文件加载一些预定义的数据。这两种环境都使用Hibernate(现在我正在从3.5升级到5.0.3)作为JPA提供程序。以下代码在生产环境中正常工作,但在jUnit下运行时抛出SQL错误:-104,SQLState:23505-完整性约束冲突:唯一约束或索引冲突。当我创建新记录时,id将填充为1,而不是数据集文件中的最大id 请让我知道任何帮助 下面是实体、测试类和数据集文件 实体: @Enti
@Entity
@Table(name = "RS")
public class Schedule {
@Id
@Column(name = ID)
@SequenceGenerator(name = SEQ_GENERATOR_NAME,
sequenceName = SEQ_DB_NAME )
@GeneratedValue(strategy = GenerationType.AUTO,
generator =SEQ_GENERATOR_NAME)
private Long id;
@Column(name = NAME, unique = true)
@Size(message = "{2010}")
@NotBlank(message = "{2000}")
private String name;
资源测试:
public class ResourceTest extends AbstractTestNGJerseyDBUnitTest {
private static final Long EXISTING_RATE_SCHEDULE_ID = 6L;
private static final Long NON_EXISTING_RATE_SCHEDULE_ID = 999999L;
private static final Long RATE_SCHEDULE_ID_WITH_2_PRODUCTS = 8L;
@Override
public String getDataSetFileName() {
return "dataset/ResourceTest_DBUnit.xml"; }
@Override
protected Class[] resourcesToRegister() {
return new Class[]{Resource.class};
}
@Test
public void test_endpointName() {
final String endpointName = Resource.RESOURCE_IDENTIFIER;
Assert.assertEquals(endpointName, "/schedules");
}
@Test
public void test_create() {
final ObjectMapper mapper = new ObjectMapper();
final ObjectNode rootNode = mapper.createObjectNode();
rootNode.put(NAME, "test_create");
rootNode.put(DESCRIPTION, "...");
rootNode.put(CODE, "111");
rootNode.put(STATUS_ID, Status.ACTIVE.name());
final Response response =
target(Resource.RESOURCE_IDENTIFIER).request()
.accept(MediaType.APPLICATION_JSON)
.build("POST", Entity.json(rootNode))
.invoke();
Assert.assertEquals(Response.Status.fromStatusCode(response.getStatus()), Response.Status.CREATED);
}
数据集文件:
<dataset>
<RS ID="1" NAME="AlreadyTaken" DESCRIPTION="..." CODE="777" STATUS="ACTIVE" CREATED_BY="jpayer" CREATED_DATE="2014-01-01 00:00:00.0" UPDATED_BY="jpayer" UPDATED_DATE="2014-01-01 00:00:00.0"/>
<RS ID="2" NAME="FOO" DESCRIPTION="desc" CODE="1111" STATUS="ACTIVE" CREATED_BY="jpayer" CREATED_DATE="2014-01-01 00:00:00.0" UPDATED_BY="jpayer" UPDATED_DATE="2014-01-01 00:00:00.0"/>
</dataset>