Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Quais são as melhores soluções para problemas conhecidos com a validação de esquema de colunas de ponto flutuante do Hibernate ao usar o Oracle 10g?


Esta é uma limitação conhecida do validador de esquema, verifique HHH-2315 . Então você tem três opções aqui (na verdade quatro, mas acho que desativar a validação não é desejado). Qualquer:

  • Use um float em vez de um double no nível Java - isso pode não ser uma opção.

  • Patch org.hibernate.mapping.Table.validateColumns(Dialect dialect, Mapping mapping, TableMetadata tableInfo) para adicionar uma condição especial para este caso em particular - esta não é realmente uma opção leve.

  • Estende o org.hibernate.dialect.Oracle10gDialect para fazê-lo usar float para o tipo SQL DOUBLE
    public class MyOracle10gDialect extends Oracle10gDialect {
        public MyOracle10gDialect() {
            super();
        }
        protected void registerNumericTypeMappings() {
            super.registerNumericTypeMappings();
            registerColumnType( Types.DOUBLE, "float" );
        }
    }
    

A opção posterior parece segura, mas exigirá alguns testes para ver se não introduz nenhuma regressão. Eu não olhei para o código do driver JDBC da Oracle, então não posso dizer como float e double precision diferem ao nível do condutor.