JPA检查是否可以删除实体

时间:2014-01-17 17:49:41

标签: java hibernate jpa

如何检查JPA中的实体是否可以删除并且不会抛出数据完整性异常?我想到的唯一方法是逐个检查所有被引用的实体,或者尝试在事务中删除然后回滚但是还有其他更简单的方法吗?

2 个答案:

答案 0 :(得分:3)

如果“可以删除”是指“如果实体存在于持久性上下文中”,那么您已经回答了以下问题:

  

尝试在事务中删除然后回滚

如果在事务期间出现问题,则回滚

答案 1 :(得分:1)

我使用这种方法......

public void doDelete() {        
    try {
        deleteData();           
    } catch (RuntimeException runtimeException) {
        if (getRootThrowable(runtimeException).getMessage().contains("violates foreign key constraint")) {
            //can't delete entity
        }               
    }
}

public static Throwable getRootThrowable(Throwable t) {
    Throwable result = t;

    while (result.getCause() != null) {
        result = result.getCause();
    }

    return result;
}

我不喜欢这个,但它能为我做好工作......