Обойти ошибку «Entity not found» с помощью JPA - PullRequest
11 голосов
/ 22 августа 2011

Иногда достаточно сложно (или проблема с производительностью) удалить все ссылки на сущность.

Например, у меня есть объект Person, который имеет отношения к другим объектам Person.

Когда я удаляю Person, я не хочу удалять этого Person во всех отношениях, которые у него могут быть, просто потому, что иногда этот объект Person не знает, где на него ссылаются. Поэтому, если я хочу удалить все ссылки, я должен выполнить дополнительную работу SQL, которая может привести к проблемам с производительностью.

В идеальном мире я хотел бы удалить объект Person, и когда другой Person делает ссылку на этого Person (потому что он имеет свой идентификатор в своих отношениях), просто возвращает null.

Дело в том, что JPA жалуется, что

* * 1010

Есть ли способ заставить JPA вернуть нулевую ссылку, а не исключение в этом случае?

Ответы [ 3 ]

25 голосов
/ 22 августа 2011

Вы можете использовать аннотацию @ NotFound со значением NotFoundAction.IGNORE, которая будет возвращать ноль, если связанная сущность не существует.

Предостережение: если вы используете это в коллекциях, а hibernate не найдет ни одну из записей, он добавит нулевое значение в коллекцию, что очень раздражает. Чтобы избежать этого, вы можете поместить коллекцию в коллекцию, которая пропускает нули.

5 голосов
/ 22 августа 2011

Нет, по крайней мере, ничего стандартного (JPA)

Но вы можете контролировать, что происходит с этими ассоциациями, используя атрибуты cascade ot @*ToMany и @*ToOne.

2 голосов
/ 21 ноября 2015

Вы бы использовали @NotFound (action = NotFoundAction.IGNORE), чтобы пропустить нулевые объекты.НО (как сказал Аугусто), если вы используете, например, Primefaces Datatable и получаете 10 строк и пропускаете 2, из-за @NotFound (action = NotFoundAction.IGNORE) в вашем свойстве, у вас будет 10 строк, а не 8 (строки-призраки на самом деле).

@NotFound(action=NotFoundAction.IGNORE)
private Product p;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...