java - 使用 Hibernate ConstraintViolationException

标签 java hibernate junit

我在这里遇到了一个小问题。基本上我们有一个表,其中的列不是 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 就会知道会抛出异常。

关于java - 使用 Hibernate ConstraintViolationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36790573/

相关文章:

java - Servlet 上的 wait() 抛出异常

java - 在 MS SQL 服务器上恢复 .bak

java - GROM 创建具有多对多映射的不必要表

java - 带有 "."(句点)的 Spring Boot JPA Hibernate DB 表名

java - 如何在 Android 运行时运行 JUnit 测试?

java - 并非所有异常都映射到 SimpleMappingExceptionResolver 中的 resolveException

java - 简单的 Java 问题

mysql - native 查询的 Hibernate 异常

spring - spring 上下文中的测试套件

java - 用于比较两个空对象的 junit 测试用例