sql >> Database >  >> RDS >> Oracle

Wat zijn de beste oplossingen voor bekende problemen met Hibernate's schemavalidatie van drijvende-kommakolommen bij gebruik van Oracle 10g?

Dit is een bekende beperking van de schemavalidator, controleer HHH-2315 . Dus je hebt hier drie opties (eigenlijk vier, maar ik denk dat het deactiveren van validatie niet gewenst is). Ofwel:

  • Gebruik een float in plaats van een double op Java-niveau - dit is misschien geen optie.

  • Patch org.hibernate.mapping.Table.validateColumns(Dialect dialect, Mapping mapping, TableMetadata tableInfo) om een ​​speciale voorwaarde toe te voegen voor dit specifieke geval - dit is niet echt een lichte optie.

  • Breidt de org.hibernate.dialect.Oracle10gDialect uit om het te laten gebruiken float voor het SQL-type DOUBLE

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

De laatste optie lijkt veilig, maar vereist wat testen om te zien of het geen regressie introduceert. Ik heb niet naar de JDBC-stuurprogrammacode van Oracle gekeken, dus ik kan niet zeggen hoe float en double precision verschillen op bestuurdersniveau.



  1. Python MySQL verkeerde architectuurfout

  2. Tafelniveau Vergrendelen in sluimerstand

  3. MySQL-clienttoepassingen gebruiken

  4. Overtreding van de PRIMARY KEY-beperking