Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Was sind die besten Problemumgehungen für bekannte Probleme mit der Hibernate-Schemavalidierung von Gleitkommaspalten bei Verwendung von Oracle 10g?

Dies ist eine bekannte Einschränkung des Schema-Validierers, überprüfen Sie HHH-2315 . Sie haben hier also drei Möglichkeiten (eigentlich vier, aber ich vermute, dass das Deaktivieren der Validierung nicht erwünscht ist). Entweder:

  • Verwenden Sie ein float statt eines double auf Java-Ebene - dies ist jedoch möglicherweise keine Option.

  • Patch org.hibernate.mapping.Table.validateColumns(Dialect dialect, Mapping mapping, TableMetadata tableInfo) um eine spezielle Bedingung für diesen speziellen Fall hinzuzufügen - das ist nicht wirklich eine leichte Option.

  • Erweitert den org.hibernate.dialect.Oracle10gDialect um es zu machen, benutze float für den SQL-Typ DOUBLE

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

Die letztere Option scheint sicher zu sein, erfordert jedoch einige Tests, um festzustellen, ob sie keine Regression einführt. Ich habe mir den JDBC-Treibercode von Oracle nicht angesehen, daher kann ich nicht sagen, wie float und double precision unterscheiden sich auf der Treiberebene.