Исключение Maven - Подтвердить

Когда я запускаю mvn test, все тесты верны. Я знаю, что проверить начались интеграционные тесты.

Но когда я запускаю тесты в моей IDE, я получаю это исключение. По какой причине?

Мой стек исключений

javax.persistence.PersistenceException:  org.hibernate.exception.GenericJDBCException: could not extract ResultSet  
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert  (AbstractEntityManagerImpl.java:1692)  
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert  (AbstractEntityManagerImpl.java:1602)  
    at org.hibernate.jpa.internal.QueryImpl.getSingleResult  (QueryImpl.java:560)  
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
    at java.lang.reflect.Method.invoke(Method.java:498)  
    at org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:372)  
    at com.sun.proxy.$Proxy99.getSingleResult(Unknown Source)  
    at com.datas_tech.ingo.core.repository.jpa.implementation.AisRepositoryImpl.getAisId(AisRepositoryImpl.java:34)  
    at com.datas_tech.ingo.core.repository.jpa.AisRepositoryITest.testGetAisId(AisRepositoryITest.java:37)  
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
    at java.lang.reflect.Method.invoke(Method.java:498)  
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)  
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)  
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)  
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)  
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)  
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)  
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)  
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)  
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)  
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)  

Вызванный стеком:

Caused by: org.hibernate.exception.GenericJDBCException: could not extract ResultSet  
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)  
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109)  
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:95)  
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:79)  
    at org.hibernate.loader.Loader.getResultSet(Loader.java:2117)  
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1900)  
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1876)  
    at org.hibernate.loader.Loader.doQuery(Loader.java:919)  
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336)  
    at org.hibernate.loader.Loader.doList(Loader.java:2617)  
    at org.hibernate.loader.Loader.doList(Loader.java:2600)  
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2429)  
    at org.hibernate.loader.Loader.list(Loader.java:2424)  
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:336)  
    at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1967)  
    at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:322)  
    at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:125)  
    at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:606)  
    at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:529)  
    ... 39 more  
Caused by: java.sql.SQLException: ORA-20001: �� ��������� �������� � ����� �������!  
ORA-06512: at "INSURADM.PACK_PORTAL_PROC", line 574  

Код:

@Override
public Long getAisId(String aisAgeementNumber, String phoneNumber, Integer portalId) {
    String query = "SELECT insuradm.PACK_PORTAL_PROC.FindFromTel(:p_ag_num, :p_tel, :p_portal_sub_id) FROM DUAL";
    try {
        Long aisId = (Long) entityManager
                .createNativeQuery(query)
                .setParameter("p_ag_num", aisAgeementNumber)
                .setParameter("p_tel", phoneNumber)
                .setParameter("p_portal_sub_id", portalId)
                .getSingleResult();
        return aisId;
    } catch (Exception e) {
        e.printStackTrace();
        return null; // TODO определиться что лучше, Exception или null
    }
}

1 ответ

Решение

Прямо в нижней части стека это:

java.sql.SQLException: ORA-20001:! ORA-06512: в "INSURADM.PACK_PORTAL_PROC", строка 574

Итак, ваш пакет INSURADM.PACK_PORTAL_PROC отбрасывает пользовательское исключение (ORA-20001 находится в диапазоне, который Oracle выделил для наших собственных ошибок). Возможно, вы можете прочитать сообщение об ошибке? Похоже, он написан на Unicode, поэтому мы не можем его увидеть.

В любом случае, вам нужно углубиться в INSURADM.PACK_PORTAL_PROC чтобы понять, почему это ошибка. Стек даже указывает вам место для начала - строка 574 - хотя это может быть обработчик исключений, а не строка, которая вызывает проблему. То, насколько легко диагностировать проблему, будет зависеть от качества кода PL/SQL, особенно от того, насколько хорошо он инструментирован и насколько полно ведение журнала.

Наиболее вероятным объяснением является то, что ваш экземпляр Maven указывает на другую базу данных, чем вы используете при локальном запуске тестов. Таким образом, у вас могут быть различия в тестовых данных, которые могут вызвать исключение. Вам нужно найти точный код, который вызывает исключение, и понять обстоятельства, которые его вызывают.

Поскольку это пользовательское исключение, вам нужно найти pragma exception_init декларация, которая ассоциируется -20001 с именованной переменной Exception, затем найдите RAISE для этого исключения; если повезет, будет только одно место или хотя бы одно очевидное место.

Другие вопросы по тегам