Oracle
 sql >> база данни >  >> RDS >> Oracle

Кои са най-добрите решения за известни проблеми с валидирането на схемата на Hibernate на колони с плаваща запетая при използване на Oracle 10g?

Това е известно ограничение на валидатора на схемата, проверете HHH-2315 . Така че имате три опции тук (всъщност четири, но предполагам, че деактивирането на валидирането не е желано). Или:

  • Използвайте float вместо double на ниво Java - това обаче може да не е опция.

  • Пач org.hibernate.mapping.Table.validateColumns(Dialect dialect, Mapping mapping, TableMetadata tableInfo) да добавите специално условие за този конкретен случай - това всъщност не е лесна опция.

  • Разширява org.hibernate.dialect.Oracle10gDialect за да го накарате да използва float за SQL тип DOUBLE

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

По-късният вариант изглежда безопасен, но ще изисква известно тестване, за да се види дали не въвежда регресия. Не погледнах кода на JDBC драйвера на Oracle, така че не мога да кажа как float и double precision се различават на ниво драйвер.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-00906:липсваща лява скоба

  2. java.sql.SQLException:Неуспешно преобразуване във вътрешно представяне:при предаване на ArrayList към Oracle.sql.ARRAY

  3. Конфигуриране на слушателя на Oracle за външно слушане

  4. Oracle:Какво прави „(+)“ в клауза WHERE?

  5. средна продажба на тримесечие с предходно тримесечие средна продажба