我们使用Oracle作为内存单元测试数据库和DBUnit的 生产环境 数据库和HSQLDB . 我正在从数据集文件中加载一些预定义的数据 . 两个环境都使用Hibernate(现在我从3.5升级到5.0.3)作为JPA提供程序 . 以下代码在 生产环境 中正常工作,但抛出SQL错误:-104,SQLState:23505 - 完整性约束违规:在jUnit下运行时的唯一约束或索引冲突 . 当我创建一个新记录时,id用数据集文件中的1而不是max id填充 .

请让我知道任何帮助 .

这是实体,测试类和数据集文件 .

实体:

@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;

ResourceTest:

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文件:

<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>