У меня есть несколько классов Java с двойными полями, которые я сохраняю через Hibernate. Например, у меня есть
@Entity
public class Node ...
private double value;
Когда Hibernate org.hibernate.dialect.Oracle10gDialect
создает DDL для таблицы Node, он отображает поле значения в тип с двойной точностью.
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
Очень похожая проблема приведена в базе данных Hibernate JIRA как HHH-1961. Я бы хотел избегать делать что-либо, что нарушит поддержку MySql, Postgres и Sql Server, поэтому расширение Oracle10gDialect
представляется наиболее перспективным из обходных решений, упомянутых в HHH-1961. Но расширение диалекта - это то, чего я никогда не делал раньше, и я боюсь, что могут быть какие-то неприятные ошибки. Каков наилучший способ решения этой проблемы, который не нарушит нашу совместимость с MySql, Postgres и Sql Server?