Oracle
 sql >> Base de données >  >> RDS >> Oracle

Quelles sont les meilleures solutions de contournement pour les problèmes connus avec la validation de schéma d'Hibernate des colonnes à virgule flottante lors de l'utilisation d'Oracle 10g ?

Ceci est une limitation connue du validateur de schéma, cochez HHH-2315 . Vous avez donc trois options ici (en fait quatre mais je suppose que la désactivation de la validation n'est pas souhaitée). Soit :

  • Utiliser un float au lieu d'un double au niveau Java - cela pourrait cependant ne pas être une option.

  • Patch org.hibernate.mapping.Table.validateColumns(Dialect dialect, Mapping mapping, TableMetadata tableInfo) pour ajouter une condition spéciale pour ce cas particulier - ce n'est pas vraiment une option légère.

  • Étend le org.hibernate.dialect.Oracle10gDialect pour le faire utiliser float pour le type SQL DOUBLE

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

La dernière option semble sûre mais nécessitera des tests pour voir si elle n'introduit aucune régression. Je n'ai pas regardé le code du pilote JDBC d'Oracle, donc je ne peux pas dire comment float et double precision diffèrent au niveau du conducteur.