sql >> Base de Datos >  >> RDS >> Oracle

¿Cuáles son las mejores soluciones para los problemas conocidos con la validación del esquema de Hibernate de las columnas de punto flotante cuando se usa Oracle 10g?

Esta es una limitación conocida del validador de esquema, marque HHH-2315 . Entonces tiene tres opciones aquí (en realidad cuatro, pero supongo que no se desea desactivar la validación). O bien:

  • Usa un float en lugar de un double en el nivel de Java; sin embargo, esta podría no ser una opción.

  • Parche org.hibernate.mapping.Table.validateColumns(Dialect dialect, Mapping mapping, TableMetadata tableInfo) para agregar una condición especial para este caso en particular; esta no es realmente una opción ligera.

  • Extiende el org.hibernate.dialect.Oracle10gDialect para hacerlo usa float para el tipo SQL DOUBLE

    public class MyOracle10gDialect extends Oracle10gDialect {
        public MyOracle10gDialect() {
            super();
        }
        protected void registerNumericTypeMappings() {
            super.registerNumericTypeMappings();
            registerColumnType( Types.DOUBLE, "float" );
        }
    }
    

La última opción parece segura, pero requerirá algunas pruebas para ver si no presenta ninguna regresión. No miré el código del controlador JDBC de Oracle, por lo que no puedo decir cómo float y double precision difieren en el nivel del controlador.