Спящий и ДВОЙНОЙ в Oracle 11g

1

Я переношу приложение, написанное для Sybase и Hibernate 3.6.4, чтобы начать использовать Oracle 11g. Насколько я понимаю, людям удалось заставить Hibernate работать с Oracle 11g с использованием Oracle10gDialect. Я использую это, но для одного из столбцов, которые сопоставлены java.lang.Double У меня возникают проблемы.

Когда я создаю таблицу с столбцом BINARY_DOUBLE, спящий режим жалуется на высказывание:

Вызывается: org.hibernate.HibernateException: неправильный тип столбца в TEST_SCHEMA.TEST_TABLE для столбца PERCENTAGE. Найдено: binary_double, ожидается: двойная точность

и когда я определяю столбец как DOUBLE PRCEISION, он жалуется, говоря:

Вызывается: org.hibernate.HibernateException: неправильный тип столбца в TEST_SCHEMA.TEST_TABLE для столбца PERCENTAGE. Найдено: float, ожидается: двойная точность

Глядя на документы, обе эти ошибки имеют смысл, потому что в Oracle нет типа данных Double. Но, глядя на код Dialect, я не уверен, почему я вижу вторую ошибку.

Класс org.hibernate.dialect.Oracle8iDialect имеет этот метод, который имеет "двойную точность", сопоставленный с типами.DOUBLE

protected void registerNumericTypeMappings() {
    registerColumnType( Types.BIT, "number(1,0)" );
    registerColumnType( Types.BIGINT, "number(19,0)" );
    registerColumnType( Types.SMALLINT, "number(5,0)" );
    registerColumnType( Types.TINYINT, "number(3,0)" );
    registerColumnType( Types.INTEGER, "number(10,0)" );

    registerColumnType( Types.FLOAT, "float" );
    registerColumnType( Types.DOUBLE, "double precision" );
    registerColumnType( Types.NUMERIC, "number($p,$s)" );
    registerColumnType( Types.DECIMAL, "number($p,$s)" );
}

Итак, я не уверен, почему DOUBLE PRECISION не работает для меня. Любые указания на то, что я делаю неправильно здесь. Я уверен, что те, кто тестировал Oracle11gDialect, использовали Double в своем коде.

Спасибо, К.

  • 0
    PRCEISION - это опечатка здесь? @Column(precision=10, scale=2) BigDecimal percentage;
  • 0
    Правда это опечатка просто в вопросе. Таблица успешно создана в Oracle.
Теги:
hibernate

1 ответ

1

Когда вы определяете столбец с DOUBLE PRECISION Oracle автоматически преобразует его в FLOAT который может быть проверен с помощью инструкции SQL DESCRIBE <TABLE>; , По умолчанию нет отображения типов Types.DOUBLE для float.

См. Hibernate: Found: float, expected: double precision для добавления этого сопоставления через расширение класса Oracle10gDialect.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню