异常 maven - 验证
Exception maven - Verify
当我启动 mvn test 时,所有测试都是正确的。我知道 verify 开始了集成测试。
但是当我在 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.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
}
}
在堆栈的底部是这样的:
java.sql.SQLException: ORA-20001: �� ��������� �������� � �����
�������! ORA-06512: at "INSURADM.PACK_PORTAL_PROC", line 574
所以您的程序包 INSURADM.PACK_PORTAL_PROC
正在引发用户定义的异常(ORA-20001 在 Oracle 为我们自己的错误预留的范围内)。也许您可以阅读错误消息?好像是用Unicode写的,所以看不到。
无论哪种方式,您都需要深入研究 INSURADM.PACK_PORTAL_PROC
以了解错误原因。堆栈甚至会告诉您从哪里开始——第 574 行——尽管那可能是一个异常处理程序,而不是导致问题的那一行。诊断问题的难易程度取决于 PL/SQL 代码的质量,尤其是检测的好坏以及日志记录的全面程度。
最可能的解释是您的 Maven 实例指向的数据库与您在 运行 本地测试时使用的数据库不同。因此,您的测试数据可能会发生变化,这可能会导致异常。您需要找到引发异常的确切代码并了解触发异常的情况。
因为它是用户定义的异常,所以您需要找到 pragma exception_init
声明,该声明将 -20001
与命名的异常变量相关联,而不是找到该异常的 RAISE;运气好的话,只会发生一个地方,或者至少一个明显的地方。
当我启动 mvn test 时,所有测试都是正确的。我知道 verify 开始了集成测试。
但是当我在 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.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
}
}
在堆栈的底部是这样的:
java.sql.SQLException: ORA-20001: �� ��������� �������� � ����� �������! ORA-06512: at "INSURADM.PACK_PORTAL_PROC", line 574
所以您的程序包 INSURADM.PACK_PORTAL_PROC
正在引发用户定义的异常(ORA-20001 在 Oracle 为我们自己的错误预留的范围内)。也许您可以阅读错误消息?好像是用Unicode写的,所以看不到。
无论哪种方式,您都需要深入研究 INSURADM.PACK_PORTAL_PROC
以了解错误原因。堆栈甚至会告诉您从哪里开始——第 574 行——尽管那可能是一个异常处理程序,而不是导致问题的那一行。诊断问题的难易程度取决于 PL/SQL 代码的质量,尤其是检测的好坏以及日志记录的全面程度。
最可能的解释是您的 Maven 实例指向的数据库与您在 运行 本地测试时使用的数据库不同。因此,您的测试数据可能会发生变化,这可能会导致异常。您需要找到引发异常的确切代码并了解触发异常的情况。
因为它是用户定义的异常,所以您需要找到 pragma exception_init
声明,该声明将 -20001
与命名的异常变量相关联,而不是找到该异常的 RAISE;运气好的话,只会发生一个地方,或者至少一个明显的地方。