我在这里努力解决一个小问题。基本上,我们有一个表,其中的列不是PK,但需要唯一,因此我们在其上添加了唯一性约束。现在,在我们的服务层中,我们希望捕获当有人创建打破该唯一性约束的记录并返回现有记录而不是创建新记录时生成的异常。

基本上,代码如下所示:

    ObjectDto object = null;
    try {
        object = convertToDto(objectDao.create(convertToModel(pObject)));
    }
    catch (PersistenceException e) {
        object= getByLabel(pObject.getLabel());
    }
    return object;


这...有效,但同时无效。我们正确地捕获了异常并返回了通过getByLabel()方法检索的对象,但是JUnit仍然显示错误,因此我们的单元测试没有通过:

javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement


还有其他方法可以处理这些用例吗?

编辑:

ObjectDto object = new ObjectDto();
object .setLabel("XXX");
object = objectService.create(object);

ObjectDto object2 = new ObjectDto();
object2.setLabel("XXX");
object2 = objectService.create(object2);

最佳答案

使用以下注释您的测试方法:

@Test(expected=PersistenceException.class)


因此,jUnit将知道将引发异常。

09-27 22:30