У меня есть несколько классов Java с двойными полями, которые я сохраняю через Hibernate. Например, у меня есть
@Entity
public class Node ...
private double value;
Когда Hibernate org.hibernate.dialect.Oracle10gDialect
создает DDL для таблицы узлов, он отображает поле значения в тип "двойной точности".
create table MDB.Node (... value double precision not null, ...
Может показаться, что в Oracle «двойная точность» является псевдонимом «float». Поэтому, когда я пытаюсь проверить схему базы данных с помощью метода org.hibernate.cfg.AnnotationConfiguration.validateSchema()
, Oracle, по-видимому, описывает столбец значений как «float». Это заставляет Hibernate выдавать следующее исключение
org.hibernate.HibernateException: Wrong column type in DBO.ACL_RULE for column value. Found: float, expected: double precision
Очень похожая проблема указана в базе данных JIRA Hibernate как HHH-1961 . Я бы хотел избежать всего, что может нарушить поддержку MySql, Postgres и Sql Server, поэтому расширение Oracle10gDialect
представляется наиболее перспективным из обходных путей, упомянутых в HHH-1961 . Но расширение диалекта - это то, чего я никогда не делал раньше, и я боюсь, что могут быть некоторые неприятные ошибки. Как лучше обойти эту проблему, чтобы не нарушить нашу совместимость с MySql, Postgres и Sql Server?