Следующий метод выполняет простой запрос через Hibernate для извлечения некоторых пользовательских Entity
записей из базы данных с учетом их уникальных идентификаторов:
public List<Entity> getEntity(Collection<Long> ids) {
Session session = null;
String sqlQuery =
"SELECT entities.* FROM entities WHERE entities.id IN :ids";
try {
session = createSession();
NativeQuery<Entity> query = session.createNativeQuery(sqlQuery)
.addEntity(Entity.class)
.setParameter("ids", ids);
List<Entity> entities = query.list();
return entities;
} catch (Exception e) {
log.error(e);
return null;
} finally {
if (session != null) {
session.close();
}
}
}
Кажется, что приведенный выше код работаеткак и ожидалось, если список предоставленных идентификаторов можно найти в базе данных, но если какой-либо из указанных идентификаторов не соответствует существующей записи, выдается следующее исключение:
javax.persistence.EntityNotFoundException: No row with the given identifier exists
Статически подавить это исключение(т. е. во время компиляции), в классе Entity
может использоваться следующая аннотация:
@NotFound(action=NotFoundAction.IGNORE)
Однако этот подход не подходит, если, например, определение класса Entity
не можетбыть изменен клиентским кодом.
Есть ли способ динамически подавить исключение (т. е. во время выполнения), например, для каждого запроса?