JPA: что означает проверка бина для предварительного удаления? - PullRequest
0 голосов
/ 04 марта 2020

JPA: что означает проверка бина для предварительного удаления?

public class Foo {

    @Past
    private Date date;
}

При удалении сущности Foo, если дата действительна (прошедшая дата), может ли сущность Foo быть удалена или не должна быть удален? При удалении объекта, почему мы заботимся о том, является ли объект действительным или нет?

1 Ответ

0 голосов
/ 05 марта 2020

Поведение по умолчанию, если для JPA активирована Bean Validation, заключается в проверке событий pre-persist и pre-update. И проверяемые ограничения - это те, которые входят в группу по умолчанию (Default).

Чтобы активировать проверку для события перед удалением, необходимо установить для свойства постоянства javax.persistence.validation.group.pre-remove в файле постоянства. xml файла значение групп проверки, которые вы хотите применить.

Например, Вы можете создать группу (это просто пустой интерфейс):

public interface DeleteGroup {
}

и добавить ограничение в поле, которое вы хотите проверить:

public class Foo {

    @Past(groups = {DeleteGroup.class})
    private Date date;
}

И на постоянство. xml установите свойство:

<property name="javax.persistence.validation.group.pre-remove" value="yourpackage.DeleteGroup" />

Затем при событии удаления это ограничение будет проверено. Он не будет проверен при предварительной вставке или предварительном обновлении, если вы не назначите его также в группу по умолчанию.

Это полезно, если вы хотите быть уверены, что запись не может быть удалена, если она не не было обработано (например, поле canBeDeleted равно true) или соответствует некоторым более сложным критериям.

...