尝试捕获特定的ConstraintViolationException

时间:2020-07-15 23:56:47

标签: java spring hibernate spring-mvc exception

基本信息-我正在将Java 8与Spring MVC 5.2和Hibernate 5.4结合使用(使用Maven)

我具有以下数据对象类-

@Entity
@Table(name = "TaskDetails", uniqueConstraints = {@UniqueConstraint( columnNames = {"taskID", "processID"} )} )
public class TaskDetailsDo implements Serializable{
    
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="contextID")
    private String contextID;
    
    @Column(name="taskID")
    private String taskID;
    
    @Column(name="processID")
    private String processID;

(还有许多其他列,但此处不相关,因为它们都没有任何约束)。

现在,在我的数据访问对象类中,我只想在没有相同的taskID和processID组合的情况下保存对象。为此,我正在使用

public boolean save(TaskDetailsDo taskDetails) {
        try {
            getSession().save(taskDetails);
            return true;
        } catch(ConstraintViolationException e)
            {
              return false;
            }

现在,这里的想法是,如果一个组合已经存在,它将抛出ConstraintViolationException,而我将有效地返回false,以表明该组合已经存在。但是,问题在于ConstraintViolationException还会捕获其他类型的Constraint Violations(例如,可能带有主键)。现在,我只想捕获一种特定类型的ConstraintViolationException,即由于唯一约束违规而抛出的一种。有什么方法可以检测到违反了哪个约束?

或者,还有另一种方法可以实现我正在寻找的功能吗?

谢谢。

0 个答案:

没有答案