Динамическое подавление исключения EntityNotFoundException в Hibernate - PullRequest
0 голосов
/ 02 февраля 2019

Следующий метод выполняет простой запрос через 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 не можетбыть изменен клиентским кодом.

Есть ли способ динамически подавить исключение (т. е. во время выполнения), например, для каждого запроса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...