java db2 openjpa

java - ¿Cómo obtener los detalles exactos de la excepción OpenJPA para la conversión de datos no válidos?



db2 (1)

Estoy por debajo de la excepción java para una declaración SELECT través de OpenJPA que se conecta a la base de datos DB2.

¿Puede alguien guiarme sobre cómo encontrar exactamente qué columna es un desajuste?

El código de error ERRORCODE=-4461 realmente no elabora mucho.

org.apache.openjpa.persistence.PersistenceException: [jcc][t4][1092][11644][3.57.82] Invalid data conversion: Wrong result column type for requested conversion. ERRORCODE=-4461, SQLSTATE=42815 at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4827) ~[com.ibm.ws.jpa.jar:1.0.1-SNAPSHOT] at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4787) ~[com.ibm.ws.jpa.jar:1.0.1-SNAPSHOT] at org.apache.openjpa.jdbc.sql.DB2Dictionary.newStoreException(DB2Dictionary.java:563) ~[com.ibm.ws.jpa.jar:1.0.1-SNAPSHOT] at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:136) ~[com.ibm.ws.jpa.jar:1.0.1-SNAPSHOT] at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:86) ~[com.ibm.ws.jpa.jar:1.0.1-SNAPSHOT] at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:347) ~[com.ibm.ws.jpa.jar:1.0.1-SNAPSHOT] at com.ibm.ws.persistence.jdbc.kernel.WsJpaJDBCStoreManager.initialize(WsJpaJDBCStoreManager.java:147) ~[com.ibm.ws.jpa.jar:1.0.1-SNAPSHOT] at org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112) ~[com.ibm.ws.jpa.jar:1.0.1-SNAPSHOT] at org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57) ~[com.ibm.ws.jpa.jar:1.0.1-SNAPSHOT] at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1005) ~[com.ibm.ws.jpa.jar:1.0.1-SNAPSHOT] at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:963) ~[com.ibm.ws.jpa.jar:1.0.1-SNAPSHOT] at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:880) ~[com.ibm.ws.jpa.jar:1.0.1-SNAPSHOT] at org.apache.openjpa.kernel.DelegatingBroker.find(DelegatingBroker.java:223) ~[com.ibm.ws.jpa.jar:1.0.1-SNAPSHOT] at org.apache.openjpa.persistence.EntityManagerImpl.find(EntityManagerImpl.java:476) ~[com.ibm.ws.jpa.jar:1.0.1-SNAPSHOT] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48) ~[na:1.6.0] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0] at java.lang.reflect.Method.invoke(Method.java:600) ~[na:1.6.0] at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:365) ~[org.springframework.orm-3.1.2.RELEASE.jar:3.1.2.RELEASE] at $Proxy45.find(Unknown Source) ~[na:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48) ~[na:1.6.0] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) ~[na:1.6.0] at java.lang.reflect.Method.invoke(Method.java:600) ~[na:1.6.0] at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240) ~[org.springframework.orm-3.1.2.RELEASE.jar:3.1.2.RELEASE] at $Proxy45.find(Unknown Source) ~[na:na]

He visto esto y esto .

También pude ver que habilitar <property name="openjpa.jdbc.DBDictionary" value="db2(SupportsSelectStartIndex=true,SupportsSelectEndIndex=true)"/> en persistence.xml crea el problema. Comentando que lo resuelve. Esto está habilitado para seleccionar las 10 mejores filas del conjunto de resultados. La sintaxis SELECT TOP 10 FROM SOME_TABLE no funciona con DB2 directamente. Pero no estoy seguro de por qué exactamente esto causa problemas.


¿Puede alguien guiarme sobre cómo encontrar exactamente qué columna es un desajuste?

¿Puede abrir la clase JDBCStoreManager en IDEA y establecer el punto de interrupción en la primera línea del método initialize () cuando llama a su instrucción SELECT ? Creo que puedes averiguar qué problema es bastante fácil en el modo de depuración.