tutorial example español java hibernate orm db2 hibernate-native-query

java - example - Hibernate DB2 devuelve First Charector mientras usa NativeQuery



hibernate documentation español (2)

Me enfrento al siguiente problema al utilizar Hibernate Native Query para obtener datos del campo DB2 CHAR.

Tengo una estructura de tabla y datos de la siguiente manera.

CNTRL_4 COLUMN_ID PARAM ------- --------- -------------------- 1 1 10 1 2 12 1 3 true 2 1 10 2 2 13 2 3 false 3 1 10 3 2 16 3 3 true

CNTRL_4 y COLUMN_ID es el número, pero PARAM es CHAR (10). Si ejecuto la siguiente consulta manualmente (desde el plugin de Eclipse SQL) obtiene el resultado correcto.

SELECT CNTRL_4, COLUMN_ID, VALUE AS PARAM FROM MY_TABLE_NAME

Pero si ejecuto la misma consulta con Java Code (Hibernate Native Query) entonces estoy obteniendo el siguiente resultado.

[{CNTRL_4=1, COLUMN_ID=1, PARAM=1}, {CNTRL_4=1, COLUMN_ID=2, PARAM=1}, {CNTRL_4=1, COLUMN_ID=3, PARAM=t}, {CNTRL_4=2, COLUMN_ID=1, PARAM=1}, {CNTRL_4=2, COLUMN_ID=2, PARAM=1}, {CNTRL_4=2, COLUMN_ID=3, PARAM=f}, {CNTRL_4=3, COLUMN_ID=1, PARAM=1}, {CNTRL_4=3, COLUMN_ID=2, PARAM=1}, {CNTRL_4=3, COLUMN_ID=3, PARAM=t}]

Por favor, mira los datos PARAM , es solo el primer personaje .

Estoy usando el siguiente código de Java

String sql = "SELECT CNTRL_4, COLUMN_ID, VALUE AS PARAM FROM MY_TABLE_NAME"; SQLQuery query = hibernateUtil.getCurrentSession().createSQLQuery(sql); query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP); List<Map<String, Object>> data = (List<Map<String, Object>>) query.list(); System.out.println(data);

También busqué en Google y encontré esta publicación de blog , que es lo mismo que mi problema. Según recuerdo, resolví este problema mediante el método de conversión de tipo en consulta SQL. Pero ahora me olvido de lo que hice y no puedo resolverlo ahora.

Por favor ayuda.

ACTUALIZACIÓN: problema resuelto por tipo de fundición. Por favor mira mi respuesta.


Pruebe sin el transformador, cambie su consulta a:

String sql = "SELECT CNTRL_4, COLUMN_ID, VALUE AS PARAM FROM MY_TABLE_NAME"; SQLQuery query = hibernateUtil.getCurrentSession().createSQLQuery(sql); List data = query.list(); System.out.println(data);

Eso debería pasar la consulta al controlador DB2 subyacente, por lo que debería funcionar, a menos que el controlador de DB2 no reconozca el valor false como una Cadena.


Por tipo de fundición podemos resolver el problema de la siguiente manera

SELECT CNTRL_4, COLUMN_ID, RTRIM(CAST (VALUE AS VARCHAR(10))) AS PARAM FROM MY_TABLE_NAME

Explicación:

Como la columna VALOR se define como CHAR en DB2 e Hibernate está verificando el tipo de archivo mientras se utiliza el transformador Criteria.ALIAS_TO_ENTITY_MAP , entonces está enviando los datos a Charecter. Por lo tanto, solo devuelve el primer carácter.

Pero al seleccionar, si cambiamos el tipo a VARCHAR, entonces mi problema se está resolviendo.

Por favor, avíseme si hay alguna desventaja.