使用JPA绕过“找不到实体”错误

问题描述

您可以将@NotFound批注与值一起使用NotFoundAction.IGnorE,如果不存在关联的实体,则它将返回null。

请注意:如果在集合中使用它,而hibernate找不到条目之一,它将在集合中添加一个空值,这很烦人。为避免这种情况,您可以将集合包装在跳过空值的集合中。

解决方法

有时很难清除(或存在性能问题)删除对实体的所有引用。

例如,我有一个Person对象,它与另一个Person对象有关系。

当我删除一个Person时,我不想删除她可以拥有的所有关系,只是因为有时此Person对象不知道在何处引用了它。因此,如果我想清除所有引用,则必须执行额外的sql工作,这可能会导致性能问题。

在理想的世界中,我想删除Person对象,并且当另一个Person对这个Person进行引用时(因为它在其关系中具有其ID),只需返回null即可。

事实是JPA抱怨

javax.persistence.EntityNotFoundException: No row with the given identifier exists

有没有一种方法可以强制JPA返回空引用而不是这种情况下的异常?