Esta es una especulación basada en un comportamiento similar en el controlador de Postgres postgresql-9.4-1204-jdbc42.jar
.
Para un NUMERIC
no especificado la base de datos no parece almacenar ninguna información particular sobre la precisión y la escala de la columna. Esto permite que la base de datos almacene internamente el valor de cualquier manera que parezca adecuada. De https://www.postgresql.org/docs/current/ estático/tipo-de-datos-numérico.html
Dado que el conductor no sabe cuál es el máximo específico de implementación del servidor es que no puede devolver los valores reales. Devuelve 0 para indicar que no conoce los valores reales y no quiere hacer conjeturas informadas.
Parece que la situación es lo mismo con Oracle . La precisión máxima puede ser mayor, pero portabilidad está garantizado solo hasta 38 dígitos.
En cuanto a resolver el problema en la pregunta, como indicó StanislavL, puede forzar el valor a una precisión/escala específica mediante la conversión.