Поймать в Java исключение, которое не создается в соответствии с сигнатурой [закрыто]JAVA

Программисты JAVA общаются здесь
Anonymous
Поймать в Java исключение, которое не создается в соответствии с сигнатурой [закрыто]

Сообщение Anonymous »

Я пытаюсь перехватить исключение, которое не может быть создано в соответствии с сигнатурой метода getSingleResult().

Код: Выделить всё

    public RSA findAndLock() {
try {
final TypedQuery query = ...
return query.getSingleResult(); // RSARepositoryImpl.java:67
} catch (PessimisticLockException | LockTimeoutException ex) {
return null;
} catch (final Throwable t) {
LOGGER.error("Error of type while locking '{}': {}", t.getClass().getCanonicalName(), t.getMessage());
return null;
}
}
Согласно stacktrace генерируется исключение org.postgresql.util.PSQLException, но согласно сигнатуре это проверенное исключение не разрешено.
Также (Throwable t) Ветка catch не выполняется.

Код: Выделить всё

Caused by: org.postgresql.util.PSQLException: ERROR: could not obtain lock on row in relation "rsa"
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2733)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2420)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:517)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:434)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:194)
at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:137)
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57)
at org.hibernate.loader.Loader.getResultSet(Loader.java:2322)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2075)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2037)
at org.hibernate.loader.Loader.doQuery(Loader.java:956)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:357)
at org.hibernate.loader.Loader.doList(Loader.java:2868)
at org.hibernate.loader.Loader.doList(Loader.java:2850)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2682)
at org.hibernate.loader.Loader.list(Loader.java:2677)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:540)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:400)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:218)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1459)
at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1649)
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1617)
at org.hibernate.query.internal.AbstractProducedQuery.getSingleResult(AbstractProducedQuery.java:1665)
at xxx.repository.impl.RSARepositoryImpl.findAndLock(RSARepositoryImpl.java:67)
at xxx.repository.impl.RSARepositoryImpl$$FastClassBySpringCGLIB$$69c152cd.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:792)

РЕДАКТИРОВАТЬ: Почему кто-то закрывает этот вопрос без уважительной причины? Пожалуйста, не закрывайте его, потому что вы этого не понимаете. Это экспертный вопрос.
Решение по перехвату невыброшенного проверенного исключения не будет работать, по крайней мере, не в Java 17

Подробнее здесь: https://stackoverflow.com/questions/789 ... -signature

Вернуться в «JAVA»